2011-02-01 16 views
8

Tengo un form_for Estoy haciendo en mi vista helper que va a permitir que un usuario promocione a otro usuario de un grupo.Rieles: campo oculto en form_for no está enviando parámetros al controlador

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 

Cuando envíe el formulario a través del botón, que no parecen tener cualquiera de los parámetros de campo ocultos que envían al controlador.

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"} 

el código HTML generado se parece a:

<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 [email protected] to an officer?&quot;)" type="submit" value="Promote" /> 
</form> 

Cualquier ayuda sería muy apreciada,

Gracias!

Respuesta

4

Usted tiene este problema porque el objeto form_for es sólo ver la cadena que se genera por la última f.submit etiqueta, mientras todo lo demás entre el form_for y la f.submit se pierde.

En este caso, la etiqueta form_for no manipula la vista directamente, ya que básicamente se trata de una cadena que se devuelve desde el método promote_button_for.

La respuesta es que sólo tiene que encadenar las etiquetas generadas juntos, como esto:

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 

Aviso del << \, que concatena todas las cadenas generadas y les vuelve a form_for.

+0

Brillaint, muchas gracias! No pude encontrar mucha información sobre form_for dentro de un asistente de visualización, esto tiene perfecto sentido gracias. – Andrej

11

Se puede tratar

f.hidden_field :group_creator, {:value => ''} 
+1

¡Gracias, estaba buscando esto! –

Cuestiones relacionadas