我有一个表单来发送这样的表单数据:
= form_tag(admin_pturnovers_path(Pturnover.new), method: :post) do
= hidden_field_tag :project_id, projectuser.project_id
= hidden_field_tag :user_id, current_user.id
= submit_tag :submit, value: "Save"
在控制器中,我检查了参数:
params.require(:pturnover).permit(:project_id, :user_id)
当我使用表单时,我收到此错误:
ActionController::ParameterMissing - param is missing or the value is empty: pturnover
POST
参数确实缺少它:
Parameters: {"utf8"=>"✓", "authenticity_token"=>"[FILTERED]", "project_id"=>"1076", "user_id"=>"1", "commit"=>"Save"}
我希望如此:
Parameters: {"utf8"=>"✓", "authenticity_token"=>"[FILTERED]", "pturnover"=>{"project_id"=>"1076", "user_id"=>"1"}, "commit"=>"Save"}
这里有什么问题?在Pturnover.new
中使用form_tag
我会期望使用正确的require参数吗?
答案 0 :(得分:3)
使用form_for
代替form_tag
如下所示
= form_for(Pturnover.new, url: admin_pturnovers_path, method: :post) do |f|
= f.hidden_field :project_id, value: projectuser.project_id
= f.hidden_field :user_id, value: current_user.id
= f.submit "Save"
尝试上面的内容,它会按预期提供请求参数
答案 1 :(得分:1)
在
中使用Pturnover.new
form_tag
您未在Pturnover.new
中使用form_tag
,仅在_path
助手admin_pturnovers_path
中使用。
试试这个:
= form_tag(admin_pturnovers_path, method: :post) do
= hidden_field_tag 'pturnover[project_id]', projectuser.project_id
= hidden_field_tag 'pturnover[user_id]', current_user.id
答案 2 :(得分:0)
您也可以使用form_for
代替form_tag
或simple_form
。
由于您的表单速度非常快,= simple_form_for(Pturnover.new, url: admin_pturnovers_path, method: :post) do |f|
= f.hidden_field :project_id, value: projectuser.project_id
= f.hidden_field :user_id, value: current_user.id
= f.submit "Save"
可能是一种方法。这样就变成了:
simple_form
注意: text_field
猜测您是否需要text_area
或hidden_field
并添加标签。当然,由于它是input
,我相信表单会被隐藏,但是如果你在表单中使用label: false
而你不想要显示标签,那就扔掉{{ 1}}这样你就会:
f.hidden_field :project_id, label: false, value: projectuser.project_id