trilhos simple_form - campo oculto - criar?

174

Como você pode ter um campo oculto de forma simples?

O código a seguir:

= simple_form_for @movie do |f|
  = f.hidden :title, "some value"
  = f.button :submit

resulta neste erro:

undefined method `hidden' for #SimpleForm::FormBuilder:0x000001042b7cd0
Linus Oleander
fonte

Respostas:

309

tente isso

= f.input :title, :as => :hidden, :input_html => { :value => "some value" }
fl00r
fonte
8
Obrigado, isso funcionou. = f.input :title, :as => :hidden, :input_html => { :value => "some value" }
Linus Oleander
5
Essa é a simple_formmaneira de fazer entradas ocultas, no entanto, se apenas uma entrada oculta for necessária, use o hidden_fieldconstrutor de formulários do Rails, pois o Simple Form herda todos os métodos do construtor de formulários.
scarver2
281

Mais curto ainda !!!

=f.hidden_field :title, :value => "some value"

Mais curto, mais seco e talvez mais óbvio.

Obviamente, com o ruby ​​1.9 e o novo formato de hash, podemos reduzir em 3 caracteres ...

=f.hidden_field :title, value: "some value"
Michael Durrant
fonte
1
Ou <% = f.hidden_field: term_id,: value => @ transaction.term_id%>
mirap
2
Essa deve ser a resposta aceita. Mesmo que a pergunta seja feita sobre a forma simples, não há razão para usá-la quando isso realiza exatamente a mesma coisa com uma sintaxe mais curta.
Greg Blass
5
= f.input_field :title, as: :hidden, value: "some value"

Também é uma opção. Observe, no entanto, que ignora qualquer wrapper definido para o construtor de formulários.

Fuad Saud
fonte
5

A maneira correta (se você não está tentando redefinir o valor da entrada hidden_field) é:

f.hidden_field :method, :value => value_of_the_hidden_field_as_it_comes_through_in_your_form

Onde :method é o método que, quando chamado no objeto, resulta no valor que você deseja

Então, seguindo o exemplo acima:

= simple_form_for @movie do |f|
  = f.hidden :title, "some value"
  = f.button :submit

O código usado no exemplo redefinirá o valor (: title) de @movie sendo passado pelo formulário. Se você precisar acessar o valor (: title) de um filme, em vez de redefini-lo, faça o seguinte:

= simple_form_for @movie do |f|
  = f.hidden :title, :value => params[:movie][:title]
  = f.button :submit

Mais uma vez, use apenas minha resposta: você não deseja redefinir o valor enviado pelo usuário.

Espero que isto faça sentido.

Uzzar
fonte
1
Para simple_form_for, o hiddenmétodo que usa aqui vai gerar um erro undefined method escondido' for # <SimpleForm :: FormBuilder: 0x00007ffa6cde0be8> `
Kiry Meas