【发布时间】:2014-05-02 01:56:55
【问题描述】:
所以我有一个类别模型
class Category < ActiveRecord::Base
has_many :provider_categories
has_many :providers, :through => :provider_categories
end
和提供者模型
class Provider < ActiveRecord::Base
has_many :provider_categories
has_many :categories, :through => :provider_categories
accepts_nested_attributes_for :provider_categories, :allow_destroy => true
end
这是我的 provider_category 模型
class ProviderCategory < ActiveRecord::Base
belongs_to :provider
belongs_to :category
end
我正在尝试创建一个嵌套表单以将类别包含到提供程序表单中
= form_for @provider do |f|
...
-@categories.each.with_index do |category,index|
=f.fields_for :provider_category, category do |pl|
=pl.check_box :category_id
=pl.label category.name
=pl.hidden_field :provider_id, value: @provider.id
当我加载我得到的页面时复选框不合作
undefined method `category_id' for #<Category:0x0000010184ff60>
编辑:
如果我将 :category_id 更改为 id 它可以工作,但 html 输出看起来像这样
<input name="provider[provider_category][id]" type="hidden" value="0"><input checked="checked" id="provider_provider_category_id" name="provider[provider_category][id]" type="checkbox" value="1">
<label for="provider_provider_category_Acupuncture">Acupuncture</label>
<input id="provider_provider_category_provider_id" name="provider[provider_category][provider_id]" type="hidden" value="1">
编辑 2:
我最终使用了 check_box_tag
-@categories.each.with_index do |category|
=f.fields_for :provider_category, category do |pl|
.li
=check_box_tag "provider[provider_category][category_id]", category.id
=pl.label category.name
=pl.hidden_field :provider_id, value: @provider.id
现在 html 输出似乎是正确的,但它没有保存它。当我选择多个项目时,这是保存的哈希
"provider"=>{"name"=>"Mr. Awesome", "phone"=>"999-999-9999", "email"=>"awesome@awesome.com", "address"=>"awesome land", "provider_category"=>{"category_id"=>"3", "provider_id"=>"1"}}, "commit"=>"Save", "id"=>"1"}
我确实选择了 3 个选项,但只有最后一个被添加到哈希中
我还在提供者控制器的强参数中添加了提供者类别
params.require(:provider).permit(..., :provider_categories => [:category_id, :provider_id])
提前感谢您的帮助
【问题讨论】:
标签: ruby-on-rails ruby nested-attributes