我生成了一个脚手架,现在我遇到了以下问题:
当我提交表单时,参数的发送方式如下:
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_id
和model
超出assignments
。所以当我使用时:
params.require(:assignment).permit(:role_id, :model, :can_create, :can_read, :can_update, :can_delete)
结构中不存在role_id
和model
。这些字段是保存数据库中的行所必需的。
我需要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
答案 0 :(得分:5)
错误是使用<%= select_tag :role_id ...
代替<%= f.select :role_id ...
使用表单构建器f
和正确的方法select
将正确链接到模型对象并设置正确的输入字段名称