Ruby on rails 允许使用Rails 4的has_many贯穿联接表的额外参数
我的模型设置如下:Ruby on rails 允许使用Rails 4的has_many贯穿联接表的额外参数,ruby-on-rails,ruby-on-rails-4,has-many-through,Ruby On Rails,Ruby On Rails 4,Has Many Through,我的模型设置如下: class Contract <ActiveRecord::Base has_many :contract_upgrades has_many :upgrades, through: :contract_upgrades end 这里有点棘手 %td %input{type: 'text', placeholder: 'Qty'} # displays text_field box = number_field_tag # di
class Contract <ActiveRecord::Base
has_many :contract_upgrades
has_many :upgrades, through: :contract_upgrades
end
这里有点棘手
%td
%input{type: 'text', placeholder: 'Qty'} # displays text_field box
= number_field_tag # displays text_field box
选中升级复选框后,upgrade.id和contract.id将按原样保存并正常工作。我需要能够输入一个数量的升级,可以有多个。在我的Contracts controller中,upgrade_ID通过{upgrade_ID:[]}被列为白名单,无论我做了什么,只要qty字段中有任何内容,我都会得到一个未经许可的参数:qty
更新
如果有人能上班,我将能够弄清楚我基本上需要做什么/如何做。在本例中,直接从rails指南获得的联接表具有约会日期属性 您可以在
合同
模型中定义接受
合同升级的嵌套属性,并在表单中为定义f.fields\u,在合同
控制器中您可以允许(数量属性:[])
请查看此嵌套表单的屏幕广播。它将一步一步地进行:
# schema
t.integer :contract_id
t.integer :upgrade_id
t.integer :qty
class ContractUpgrade < ActiveRecord::Base
belongs_to :contract
belongs_to :upgrade
end
- @upgrades.available.each do |upgrade|
%tr{class: "#{upgrade.id}", id: 'upgrade-checkboxes'}
%td
.upgrade-checkboxes
= check_box_tag "contract[upgrade_ids][]", upgrade.id, @contract.upgrades.include?(upgrade), { upgrade_id: upgrade.id }
= label_tag "contract_upgrade_#{upgrade.id}", upgrade.name
%td
= number_to_currency("#{upgrade.price}")
- if upgrade.allow_each
%td
%input{type: 'text', placeholder: 'Qty'} # displays text_field box
= number_field_tag # displays text_field box