使用form_tag时缺少Require对象

时间:2016-08-31 07:20:37

标签: ruby-on-rails

我有一个表单来发送这样的表单数据:

= 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参数吗?

3 个答案:

答案 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_tagsimple_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_areahidden_field并添加标签。当然,由于它是input,我相信表单会被隐藏,但是如果你在表单中使用label: false而你不想要显示标签,那就扔掉{{ 1}}这样你就会:

f.hidden_field :project_id, label: false, value: projectuser.project_id