Alb*_*alà 3 checkbox ruby-on-rails strong-parameters
考虑到这些参数:
"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"}
Run Code Online (Sandbox Code Playgroud)
我想CATH category_ids PARAMS { "2"=> "1", "3"=> "1", "4"=> "1"}用正确的permit和requiresintax,比我不知道:
执行时
params.require(:product).permit(:name, :size,..., category_ids: [] )
Run Code Online (Sandbox Code Playgroud)
结果是
Unpermitted parameters: id, category_ids
Run Code Online (Sandbox Code Playgroud)
我试过params.require(:product).permit(:category_ids[:id,:val])......和其他变种
什么是正确的sintax?
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">
Run Code Online (Sandbox Code Playgroud)
为了一个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
Run Code Online (Sandbox Code Playgroud)
非常感谢!
经过更多调查,我发现了这篇文章:
解释了这个问题的优点,并且针对Rails 5,进一步说明了attr_accessor没有必要
我不完全确定,但我认为您应该将您的复选框更改为如下所示:
<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">
Run Code Online (Sandbox Code Playgroud)
然后在你的controller#product_params:
params.require(:product).permit(:id, category_ids: [])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1991 次 |
| 最近记录: |