0

これは私の最初の Rails プロジェクトであり、非常に単純な問題のように思えますが、例が見つからないようです。

オブジェクトを作成し、それを別の既存のオブジェクトの子に設定する方法がわかりません。この場合、都市と国があり、新しい都市を作成して特定の国 (既にデータベースにある) に関連するように設定する方法がわかりません。

Class City < ActiveRecord::Base
   attr_accessible #nothing
   belongs_to :country
end

Class Country < ActiveRecord::Base
   attr_accessible #nothing
   has_many :cities
end

rake タスクで新しい Country オブジェクトと新しい City オブジェクトを作成する場合、2 つのオブジェクトをどのように関連付ければよいですか?

今、私がやりたいことに最も近いものは次のとおりです。

city = City.new
city.name = "Chicago"
country = Country.find(1)
city_final = country.cities.create(city.attributes)
city_final.save

このコードで私が抱えている 2 つの問題は、大量割り当てを使用したくないこと (これらのモデルの両方の CRUD 操作をタスクのレーキのみに使用できるようにする予定です) と、それがどのように機能するかわかりません。一括割り当てが完全に開いていると仮定すると、このコードは重複した都市オブジェクトを作成しますか? そうでなければ、なぜ都市の属性を渡す必要があるのでしょうか? 私が探しているのは、コントローラーを経由せずに、直接割り当てによって国の都市属性に新しい都市を追加する方法のようです。

RoR ActiveRecord Relationships のドキュメント ページ (http://guides.rubyonrails.org/association_basics.html) を見ましたが、これを理解できません。

助けてくれてありがとう!

4

1 に答える 1

0

ActiveRecord は、コレクションのgetterメソッドと setter メソッドをいくつか提供します。

だからあなたは書くことができます

country = Country.find(1)
city = City.new
city.name = "Chicago"
city.country = country #Or Country.find(1) directly here
city.save

あなたが望むようにうまくいくことを願っています!

于 2012-12-30T20:20:24.653 に答える