0

私は2つのモデルを持っていStateますOffice.

Office has_one State
Office name: string, city: string, state: State

State belongs_to Office 
State name: string, Abbrv: string

私はRubyが初めてなので、これがどのように機能するかを理解しています。私は次のように作成すると思いOfficeます:

Office.create( name: 'The Building', city: 'Kansas', state: State.first )

保存されたものを見ると、state: nil

私は何を間違っていますか?

4

2 に答える 2

0

明確にするために、モデル間の関連付けとテーブル間の関係を作成します。1 対 1 の関連付けを作成するには、それぞれhas_one:name_of_the_child_model、またはを設定します。belongs_to :name_of_the_parent_modelあなたの例では:

class Office < ActiveRecord::Base
attr_accessible :name, :city
has_one :state
end

class State < ActiveRecord::Base
attr_accessible :name, :abbrv
belongs_to :office
end

その後、対応するテーブル間の関係を作成します。これを行うには、親テーブル (Office モデル) の主キーを子テーブル (State モデル) の新しいフィールド/列として設定します。State モデルは次のようになります。

class State < ActiveRecord::Base
attr_accessible :name, :abbrv, :office_id
belongs_to :office
end

Office オブジェクトで新しい State オブジェクトを 1 ステップでインスタンス化して保存するには、次の.create_modelname(attributes={})メソッドを使用できます
office = Office.find(id)
office.create_state({name: "state_name", abbr: "abbrv"})

以前に書き込んでいない状態テーブルから最初のオブジェクトを読み込もうとしていたためnilです。State.first

于 2013-07-19T21:21:46.503 に答える
0

:stateの代わりにDB テーブルを使用しているようです:state_id。Office には、DB に という列が必要:state_idです。

Office で save を呼び出すと、状態の ID が保存されます。呼び出すoffice.stateと、DB から状態が自動的に取得されます。呼び出すと、DB にまだ永続化されていない場合はoffice.save、添付も保存されます。state

于 2013-07-19T16:24:15.540 に答える