如何在Rails中同时保存许多has_many_through对象?
我有两个相关的模型如下。
USERS has_many :celebrations has_many :boards, :through => :celebrations BOARDS has_many :celebrations has_many :users, :through => :celebrations CELEBRATIONS :belongs_to :user :belongs_to :board
在我的控制器中,我想从表单数据创建对象。 我这样做如下:
@user = User.new(params[:user]) @board = Board.new(params[:board]) if @user.save & @board.save @user.celebrations.create(:board_id => @board,:role => "MANAGER") redirect_to :action => some_action end
由于模型是由许多人加入的,有没有办法一次性保存它们然后一次产生错误信息,以便它们同时显示在表格上?
这样做
@user = User.new(params[:user]) @user.boards << @board @user.save
这将保存用户对象和与同一命令@user.save
相关联的板对象。 它将创建中间庆祝记录,同时保存user_id
和board_id
但在您的情况下,它可能没有用,因为您需要设置庆祝表的其他列的值
你的方法看起来很标准。 回答你的问题……
使用关联时, <<
运算符与create
方法基本相同,除了:
-
<<
使用交易。create
没有。 -
<<
触发:before_add和:after_add回调。create
没有。 -
<<
返回关联代理(本质上是对象的集合),如果成功,则false不成功。create
返回已create
的新实例。
在你的情况下使用<<
运算符不会让你太多,因为你仍然会有多个事务。 如果您希望操作中的所有数据库插入/更新都是primefaces的,则可以将操作包装到事务中。 有关详细信息,请参阅Rails API: http : //api.rubyonrails.org/classes/ActiveRecord/Transactions/ClassMethods.html