Rails 5 个强参数,在复选框值中有一个数组
Rails 5 strong params with an Array within check boxes values
鉴于这些参数:
"product"=><ActionController::Parameters {"id"=>"",
"category_ids"=><ActionController::Parameters {"2"=>"1", "3"=>"1", "4"=>"1"} ,
"name"=>"...", "description"=>"a good prod", "size"=>"2x3m", "price"=>"23$", "url_video"=>"http://...", "remarks"=>"bla"}
我想捕捉 category_ids 参数 {"2"=>"1", "3"=>"1", "4"=>" 1"} 具有正确的 permit
和 require
语法:
执行时
params.require(:product).permit(:name, :size,..., category_ids: [] )
结果是
Unpermitted parameters: id, category_ids
我试过params.require(:product).permit(:category_ids[:id,:val])
...和其他变体
正确的语法是什么?
PD:这些参数是 的结果,例如:
<input type="checkbox" name="product[category_ids][2]" id="product_category_ids_2" value="1">
<input type="checkbox" name="product[category_ids][3]" id="product_category_ids_3" value="1">
对于 has_and_belongs_to_many
关系
class Product < ActiveRecord::Base
has_many :images, dependent: :destroy
has_and_belongs_to_many :categories, autosave: true
attr_accessor :category_list
end
class Category < ActiveRecord::Base
has_and_belongs_to_many :products
before_destroy :check_products
end
非常感谢!
经过多方调查,找到了这篇文章:
Has Many Through Checkboxes in Rails 3.x, 4.x and 5
解释了关于这个问题的礼貌,并且是为了Rails 5,进一步解释了如何attr_accessor
是不必要的
基本上没有允许散列的语法。我通常杜有这样的方法 ApplicationController
def nested_params_keys(key, nested_key)
(params[key].try(:fetch, nested_key, {}) || {}).keys
end
然后在其他控制器中我允许了参数
params.require(:product).permit(
:name,
category_ids: nested_params_keys(:product, :category_ids)
)
我不太确定,但我认为您应该将复选框更改为如下所示:
<input type="checkbox" name="product[category_ids][]" id="product_category_ids_2" value="2">
<input type="checkbox" name="product[category_ids][]" id="product_category_ids_3" value="3">
然后在你的 controller#product_params
:
params.require(:product).permit(:id, category_ids: [])
鉴于这些参数:
"product"=><ActionController::Parameters {"id"=>"",
"category_ids"=><ActionController::Parameters {"2"=>"1", "3"=>"1", "4"=>"1"} ,
"name"=>"...", "description"=>"a good prod", "size"=>"2x3m", "price"=>"23$", "url_video"=>"http://...", "remarks"=>"bla"}
我想捕捉 category_ids 参数 {"2"=>"1", "3"=>"1", "4"=>" 1"} 具有正确的 permit
和 require
语法:
执行时
params.require(:product).permit(:name, :size,..., category_ids: [] )
结果是
Unpermitted parameters: id, category_ids
我试过params.require(:product).permit(:category_ids[:id,:val])
...和其他变体
正确的语法是什么?
PD:这些参数是 的结果,例如:
<input type="checkbox" name="product[category_ids][2]" id="product_category_ids_2" value="1">
<input type="checkbox" name="product[category_ids][3]" id="product_category_ids_3" value="1">
对于 has_and_belongs_to_many
关系
class Product < ActiveRecord::Base
has_many :images, dependent: :destroy
has_and_belongs_to_many :categories, autosave: true
attr_accessor :category_list
end
class Category < ActiveRecord::Base
has_and_belongs_to_many :products
before_destroy :check_products
end
非常感谢!
经过多方调查,找到了这篇文章:
Has Many Through Checkboxes in Rails 3.x, 4.x and 5
解释了关于这个问题的礼貌,并且是为了Rails 5,进一步解释了如何attr_accessor
是不必要的
基本上没有允许散列的语法。我通常杜有这样的方法 ApplicationController
def nested_params_keys(key, nested_key)
(params[key].try(:fetch, nested_key, {}) || {}).keys
end
然后在其他控制器中我允许了参数
params.require(:product).permit(
:name,
category_ids: nested_params_keys(:product, :category_ids)
)
我不太确定,但我认为您应该将复选框更改为如下所示:
<input type="checkbox" name="product[category_ids][]" id="product_category_ids_2" value="2">
<input type="checkbox" name="product[category_ids][]" id="product_category_ids_3" value="3">
然后在你的 controller#product_params
:
params.require(:product).permit(:id, category_ids: [])