2011-07-09 12 views
146

Chcę zrobić coś takiego w szynach Szyny ukryte pole niezdefiniowana metoda „scalić” błąd

Oto co mam do tej pory w szynach:

<%= form_for @order do |f| %> 
    <%= f.hidden_field :service, "test" %> 
    <%= f.submit %> 
<% end %> 

Ale wtedy ten błąd:

undefined method `merge' for "test":String 

Jak mogę przekazywać wartości w moim hidden_field w szynach?

+63

Lepiej przyjąć odpowiedź? – apneadiving

+5

@Jak gdzie byłeś? Tęsknimy za Tobą. Proszę wróć. – mraaroncruz

+2

Poszedł maaaaaan. – snowYetis

Odpowiedz

402

należy zrobić:

<%= f.hidden_field :service, :value => "test" %> 

hidden_field oczekuje hash jako drugi argument

+1

@rodrigovieira: jesteś bardzo mile widziany :) – apneadiving

+0

Proste, ale tak złożone dzięki! – wallerjake

+8

Jest to niespójne, ponieważ piszemy również "<% = hidden_field_tag: service", test "%>", gdy nie używamy 'form_for | f |' ... –

53

Używasz hidden_field zamiast hidden_field_tag. Ponieważ używasz wersji innej niż _tag, zakłada się, że kontroler już ustawił wartość tego atrybutu na obiekcie, który tworzy kopię formularza. Na przykład:

kontroler:

def new 
    ... 
    @order.service = "test" 
    ... 
end</pre> 

widok:

<%= form_for @order do |f| %> 
    <%= f.hidden_field :service %> 
    <%= f.submit %> 
<% end %> 
+4

+1, aby uzyskać wartościową odpowiedź – apneadiving

3

Wersja z nowej składni dla mieszań w Ruby 1.9:

<%= f.hidden_field :service, value: "test" %> 
0

Nawiasem mówiąc, nie używam ukrytych pól do wysyłania danych z serwera do przeglądarki. Data attributes są niesamowite. Można zrobić

<%= form_for @order, 'data-service' => 'test' do |f| %> 

a następnie uzyskać wartość atrybutu z jQuery

$('form').data('service') 
26

to działa dobrze w Ruby 1.9 & szyny 4

<%= f.hidden_field :service, value: "test" %>