为什么参数发送模型散列

时间:2014-07-20 01:02:45

标签: ruby-on-rails ruby-on-rails-4

我生成了一个脚手架,现在我遇到了以下问题:

当我提交表单时,参数的发送方式如下:

 Parameters: {"utf8"=>"✓", "authenticity_token"=>"Vatzcb5tgTu2+wL1t6Of+FbIK8Ibp+tM03Naai4b2OU=", "role_id"=>"1", "model"=>"schema_migrations", "assignment"=>{"can_create"=>"1", "can_read"=>"1", "can_update"=>"1", "can_delete"=>"1"}, "commit"=>"Create Assignment"}

请注意role_idmodel超出assignments。所以当我使用时:

params.require(:assignment).permit(:role_id, :model, :can_create, :can_read, :can_update, :can_delete)

结构中不存在role_idmodel。这些字段是保存数据库中的行所必需的。

我需要assignments属性中的这两个字段。

有关我的情况的信息:

我的模特:

class Assignment < ActiveRecord::Base
  belongs_to :role
  validates_presence_of :role_id, :model
end

我的观点:

<%= f.label :role_id, :class => "col-sm-2 control-label" %>
<%= select_tag :role_id, options_for_select(@roles.collect{ |u| [u.title, u.id] }), :class => "form-control" %>

<%= f.label :model, :class => "col-sm-2 control-label" %>
<%= select_tag :model, options_for_select(@data_tables), :class => "form-control" %>

我的控制器:

def new
  @assignment = Assignment.new
  @data_tables = ActiveRecord::Base.connection.tables
  @roles = Role.all
end

1 个答案:

答案 0 :(得分:5)

错误是使用<%= select_tag :role_id ...代替<%= f.select :role_id ...

使用表单构建器f和正确的方法select将正确链接到模型对象并设置正确的输入字段名称