为什么参数发送模型散列

Jon*_*ira 1 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"}
Run Code Online (Sandbox Code Playgroud)

请注意,role_id并且model不在assignments.所以当我使用时:

params.require(:assignment).permit(:role_id, :model, :can_create, :can_read, :can_update, :can_delete)
Run Code Online (Sandbox Code Playgroud)

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

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

有关我的情况的信息:

我的模特:

class Assignment < ActiveRecord::Base
  belongs_to :role
  validates_presence_of :role_id, :model
end
Run Code Online (Sandbox Code Playgroud)

我的看法:

<%= 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" %>
Run Code Online (Sandbox Code Playgroud)

我的控制器:

def new
  @assignment = Assignment.new
  @data_tables = ActiveRecord::Base.connection.tables
  @roles = Role.all
end
Run Code Online (Sandbox Code Playgroud)

Ben*_*enj 5

错误是使用<%= select_tag :role_id ...而不是<%= f.select :role_id ...

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