【问题标题】:Rails 4 Checklist form + validationRails 4清单表单+验证
【发布时间】:2014-04-01 18:03:50
【问题描述】:

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

【问题讨论】:

  • 由于这需要大量调试,让我们在聊天室 chat.stackoverflow.com/rooms/48530/ror 上讨论这个问题

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


【解决方案1】:

修改directive_params如下:

注意:将“place”作为数组传递,也强制作为最后一个参数。

def directive_params 
  if params[:directive].present? 
    params.require(:directive).permit( :field2, :field3, :field4, :field5, :place => []) 
  else 
    params.fetch(:directive, {}) 
  end 
end

将“地点”作为数组传递。

在你的模型Directive 中通过添加serialize :place 对其进行序列化。


我还必须将复选框更改为如下所示:

<%= f.check_box :place, {:multiple => true}, "1", nil %>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-03
    • 1970-01-01
    • 1970-01-01
    • 2010-09-26
    • 2019-01-12
    • 2021-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多