这个头衔是满口的。
所以我有这样的事情:
class Company < ActiveRecord::Base
has_many :company_partner_associations
has_many :partners, through: :company_partner_associations
end
class CompanyPartnerAssociation
belongs_to :company
belongs_to :partner
end
class Partner
has_many :company_partner_associations
has_many :companies, through: :company_partner_associations
end
在公司表单上,我试图列出所有合作伙伴,旁边有一个复选框。如果我检查一个,它会创建关联。如果我取消它就会破坏它。
<%= f.fields_for :company_partner_associations, Partner.all do |p| %>
<%= f.check_box :partner_id %>
<% end %>
失败,因为传递的对象是合作伙伴,因此获取undefined partner_id on Partner
我确定那里有一个漂亮的解决方案!谢谢!
答案 0 :(得分:0)
这样做:
<%= f.collection_check_boxes :partner_ids, Partner.all, :id, :name %>
否fields_for
。
这必须在控制器中附带以下参数:
params.require(:company).permit(:company, :params, partner_ids: [])
这应该在partner_ids
模型中设置@company
。
使用HABTM
,您可以通过填充“collection_singular_ids
”方法来声明关联数据; HMT
具有与has_many
relation:
虽然这将替换当前关联的对象,但它比调用f.fields_for
简单得多 - 特别是对于挑选合作伙伴。
-
您也可以使用collection_check_boxes
来实现此目的:)
答案 1 :(得分:-1)
这里不完全确定这是问题,但我认为可能是你的控制器不允许合作伙伴id的数组。因此,在您公司的company_partner_params中,控制器需要允许类似partner_attributes:[:id]的内容。那里的语法可能不完全正确,但如果那是你遗漏的东西,你应该四处寻找。
这就是我认为表格应该是这样的:
toolBar.items?.removeAtIndex(0)
toolBar.items?.insert(playButton, atIndex: 0)