1

ActiveRecord レールの has_many リレーションの次のコード ベースがあります。

class Foo < ActiveRecord::Base
  has_many :foo_bars
end

class Bar < ActiveRecord::Base
end  

class FooBar < ActiveRecord::Base
  belongs_to :foo
  belongs_to :bar
end 

作成中に FooBar エントリを Foo に追加するにはどうすればよいですか。これは次のように私のコードです:

@foo = Foo.create(params[:foo])
bars = params[:bars] # bars in a array of string format
bar_ids = bars.collect{|b| b.to_i}

@foo.foo_bars << bar_ids
@foo.save
4

1 に答える 1

1

試してみてください

@foo = Foo.create(params[:foo])
@foo.foo_bars << params[:bars].map {|s| FooBar.new(:bar_id => s.to_i)}  
@foo.save

コレクションFooBar内の各 IDの新しいインスタンスを作成します。params[:bars]最終的にと のsave両方が作成されます。関連付けに関するヘルプについては、こちらのドキュメントを参照してください。@fooFooBar

エディションの場合:

@foo = Foo.find(params[:id])
@foo.foo_bars = params[:bars].map {|s| @foo.foo_bars.where(:bar_id => s.to_i).first_or_initialize }  
于 2013-01-08T08:13:49.440 に答える