我有一个名为Directive的模型属于User模型,Directive模型有5个字段(字符串)。我创建了一个form_for,每个字段有5个复选框,每个复选框都有一个数字值。
到目前为止,这么好。问题是当我尝试提交表单时。我检查过的复选框不会因错误而持续存在,并且不会被提交。我的参数是空白的。
但它可以正常使用单选按钮。
我的表格示例:
<%= form_for(@directive, url: dashboard_directives_path(:type => params[:type]), html: {method: "post", class: "form-horizontal"}) do |f| %>
<%= f.check_box :place, "1" %>
<%= f.check_box :place, "2" %>
<%= f.check_box :place, "3" %>
...
<%= f.check_box :field2, "1" %>
...
<% end %>
这是我的控制器动作:
def new
@directive = current_member.directives.new
end
def create
@directive = current_member.directives.new(directive_params)
if @directive.save
redirect_to dashboard_path, :success => "Directive created with success!"
else
render "new"
end
end
我的控制器中的参数:
private
def directive_params
if params[:directive].present?
params.require(:directive).permit(:place, :field2, :field3, :field4, :field5)
else
params.fetch(:directive, {})
end
end
模特:
class Directive < ActiveRecord::Base
belongs_to :members, :class_name => 'Member', :foreign_key => 'member_id'
validates :place, :field2, :field3, :field4, :field5, presence: true
end
答案 0 :(得分:1)
如下所示更改directive_params
:
注意:作为最后一个参数强制传递&#39;作为数组。
def directive_params
if params[:directive].present?
params.require(:directive).permit( :field2, :field3, :field4, :field5, :place => [])
else
params.fetch(:directive, {})
end
end
通过&#39;地点&#39;作为一个数组。
在您的模型中Directive
通过添加serialize :place
来序列化它。
此外,我必须将我的复选框更改为:
<%= f.check_box :place, {:multiple => true}, "1", nil %>