我在Rails 4中分配has_many: through
时遇到了一些麻烦。
我有一个功能has_many: through
,表products
和programs
加在表格program_products
。我的模型运行正常,Product.programs = Program.all
成功将programs
分配给products
。但是,我无法弄清楚如何在视图中获得该功能。
我读过最常见的方法是使用collection_check_boxes
,所以我在表单视图中设计了以下内容:
<%= form_for(@product) do |f| %>
<%= f.collection_check_boxes(:programs, Program.all, :id, :name ) %>
<%= f.submit %>
<% end %>
这给了我
的HTML输出<input type="checkbox" value="1" name="product[programs][]" id="product_programs_1">
<input type="checkbox" value="2" name="product[programs][]" id="product_programs_2">
等等。
当我提交表格时,我会在参数中得到这个回复:
{"utf8"=>"✓",
"_method"=>"patch",
"authenticity_token"=>"xxx",
"product"=>{"name"=>"Test",
"description"=>"desc test",
"price"=>"10",
"programs"=>["1",
"2",
"3",
""]},
"commit"=>"Update Product",
"id"=>"18"}
没有错误。但是,我的数据库从未实际更新过,所以我无法弄清楚出了什么问题。以下是我的控制器的重要部分:
products_controller.rb(主CRUD控制器)
def update
@product = Product.find(params[:id])
if @product.update_attributes(product_params)
redirect_to(pages_dashboard_path)
end
end
private
def product_params
params.require(:product).permit(:name, :description, :price, :programs)
end
我无法弄清楚出了什么问题,因为我没有得到任何彻底的错误。 Rails上的collection_check_boxes文档相当混乱,所以我怀疑我的错误可能在于该设置。
由于
答案 0 :(得分:1)
我认为您应该在program_ids
电话中使用programs
代替collection_check_boxes
。并确保在permition方法中也改变它。