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