2011-02-01 5 views
8

J'ai un assistant qui va permettre à un utilisateur de promouvoir un autre utilisateur d'un groupe. Lorsque je soumets le formulaire via le bouton, je ne vois aucun des paramètres de champ cachés envoyés au contrôleur.Rails: Le champ caché dans form_for n'envoie pas de paramètres au contrôleur

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

Le Html généré ressemble:

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

Toute aide serait grandement apprécié,

Merci!

Répondre

4

Vous rencontrez ce problème parce que l'objet form_for voit que la chaîne qui est générée par la dernière balise f.submit, alors que tout le reste entre le form_for et le f.submit est perdu.

Dans ce cas, la balise form_for ne manipule pas la vue directement, car elle est simplement une chaîne renvoyée par la méthode promote_button_for.

La réponse est les balises générées ensemble que vous avez juste besoin de la chaîne, comme ceci:

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 

Notez que le << \, qui concaténer toutes les chaînes générées ensemble et les retourne à form_for.

+0

Brillaint, merci beaucoup! Je n'ai pas pu trouver beaucoup d'informations sur le formulaire_for à l'intérieur d'une aide à la visualisation, ce qui est tout à fait logique. – Andrej

11

Pouvez-vous essayer

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

Merci, je cherchais ce! –

Questions connexes