2011-02-01 17 views
8

Mam form_for robię w moim widoku pomocnika, który pozwoli jednemu użytkownikowi promować innego użytkownika z grupy.Szyny: pole ukryte w form_for nie wysyła parametrów do kontrolera

Kiedy przesyłam formularz za pomocą przycisku, nie wydaje mi się, aby któryś z ukrytych parametrów pola wysyłał do kontrolera.

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

wygenerowany kod HTML wygląda następująco:

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

Każda pomoc będzie bardzo mile widziane,

Dzięki!

Odpowiedz

4

masz ten problem, ponieważ obiekt form_for widzi tylko ciąg, który jest generowany przez ostatni f.submit tagu, natomiast wszystko inne pomiędzy form_for i f.submit jest stracone.

W tym przypadku znacznik form_for nie manipuluje bezpośrednio widokiem, ponieważ jest to w zasadzie tylko ciąg, który jest zwracany z metody promote_button_for.

Odpowiedź jest taka, że ​​po prostu trzeba łańcucha wygenerowane tagi razem, podobnie jak to:

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 

Zawiadomienie << \, który skleja wszystkie wygenerowane ciągi razem i zwraca je do form_for.

+0

Brillaint, wielkie dzięki! Nie mogłem znaleźć wiele informacji o form_for wewnątrz pomocnika widoku, to dzięki temu ma doskonały sens. – Andrej

11

można spróbować

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

Dzięki, szukałem tego! –