使用Rails更新多对多关系

时间:2012-08-22 14:19:58

标签: ruby-on-rails ruby activerecord many-to-many

我很好奇是否可以更新未在ActiveRecord中注册为模型的连接表中的一堆记录。

我有2个类,比如A和B,由表AsBs加入。

class A < ActiveRecord::Base
  attr_accessible :A_name, :B_ids
  has_and_belongs_to_many :Bs, join_table: :AsBs
end

class B < ActiveRecord::Base
  attr_accessible :B_name, :A_ids
  has_and_belongs_to_many :As, join_table: :AsBs
end

class CreateAsBs < ActiveRecord::Migration
  def up
    create_table :AsBs, id: :false do |t|
      t.integer :A_id
      t.integer :B_id
    end
   end
end

我还有一个包含B记录复选框的表单,它返回一个如下所示的params哈希

params[:my_form]
>> { "B_name_1" => "1", "B_name_2" => "0", "B_name_3" => "0"} 

#What means the user has chosen only first checkbox

我需要的是更新A-B关系,使用该params散列或基于其内容的其他自定义散列。 最后我需要这个简单的例子来创建一个

A_id | B_id
  1  |  1

记录在我的:AsBs表中,删除1-2和1-3条记录,如果有的话。

我显然可以创建一个AsBs模型并手动编辑它,但我希望能够使用它 类似@ a.Bs或@ a.B_ids的更新/ update_all / update_attributes

有什么建议吗?

1 个答案:

答案 0 :(得分:3)

如果我理解正确你应该能够做到

@b.as = [@a]
@b.save