明確にするために、モデル間の関連付けとテーブル間の関係を作成します。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