Rails 4清单表格+验证

时间:2014-04-01 18:03:51

标签: ruby-on-rails validation activerecord ruby-on-rails-4 model

我有一个名为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

1 个答案:

答案 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 %>