Rails:form_for中的隐藏字段不向控制器发送参数

And*_*rej 8 ruby-on-rails hidden-field form-for

form_for在我的视图帮助器中创建了一个允许一个用户从组中提升另一个用户的操作.

  def promote_button_for(group, user)
    membership = group.get_membership( user )
    form_for membership, :url => group_membership_path( group, membership ) do |f|
      f.hidden_field :group_creator
      hidden_field_tag 'test', '1'
      f.submit( "Promote", :onclick => "return confirm(\"Are you sure you want to promote #{user.email} to an officer?\")" )
    end
  end
Run Code Online (Sandbox Code Playgroud)

当我通过按钮提交表单时,我似乎没有将任何隐藏的字段参数发送到控制器.

Started POST "/groups/1/memberships/6" for 127.0.0.1 at 2011-02-01 01:45:32 -0600
  Processing by MembershipsController#update as HTML
  Parameters: {"utf8"=>"?", "authenticity_token"=>"VQl/rVX8OVOETv2HE7KtopUc3B19ShoMkUhjJwNlaZs=", "commit"=>"Promote", "group_id"=>"1", "id"=>"6"}
Run Code Online (Sandbox Code Playgroud)

生成的Html看起来像:

<form accept-charset="UTF-8" action="/groups/1/memberships/6" class="edit_membership" id="edit_membership_6" method="post">
   <div style="margin:0;padding:0;display:inline">
      <input name="utf8" type="hidden" value="&#x2713;" />
      <input name="_method" type="hidden" value="put" />
      <input name="authenticity_token" type="hidden" value="VQl/rVX8OVOETv2HE7KtopUc3B19ShoMkUhjJwNlaZs=" />
   </div>
   <input id="membership_submit" name="commit" onclick="return confirm(&quot;Are you sure you want to promote kquiring@gmail.com to an officer?&quot;)" type="submit" value="Promote" />
</form>
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激,

谢谢!

cra*_*crv 11

你能试一下吗

f.hidden_field :group_creator, {:value => ''}
Run Code Online (Sandbox Code Playgroud)


ndb*_*ent 4

您遇到此问题是因为该form_for对象只能看到最后一个标签生成的字符串,而和f.submit之间的其他所有内容都会丢失。form_forf.submit

在这种情况下,form_for标记不会直接操作视图,因为它基本上只是从方法返回的字符串promote_button_for

答案是,您只需将生成的标签链接在一起,如下所示:

def promote_button_for(group, user)
  membership = group.get_membership( user )
  form_for membership, :url => group_membership_path( group, membership ) do |f|
    f.hidden_field(:group_creator) << \
    hidden_field_tag('test', '1') << \
    f.submit( "Promote", :onclick => "return confirm(\"Are you sure you want to promote #{user.email} to an officer?\")" )
  end
end
Run Code Online (Sandbox Code Playgroud)

请注意<< \,它将所有生成的字符串连接在一起并将它们返回到form_for