rails Simple_form - trường ẩn - tạo?


174

Làm thế nào bạn có thể có một trường ẩn với hình thức đơn giản?

Các mã sau đây:

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

dẫn đến lỗi này:

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

Câu trả lời:


309

thử cái này

= f.input :title, :as => :hidden, :input_html => { :value => "some value" }

8
Cảm ơn, điều đó đã làm việc. = f.input :title, :as => :hidden, :input_html => { :value => "some value" }
Linus Oleander

5
Đây là simple_formcách để thực hiện các đầu vào ẩn, tuy nhiên, nếu chỉ cần một đầu vào ẩn, thì chỉ cần sử dụng trình hidden_fieldtạo biểu mẫu của Rails vì Simple Form kế thừa tất cả các phương thức của trình tạo biểu mẫu.
Scarver2

281

Ngắn nhất !!!

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

Ngắn hơn, DRYer và có lẽ rõ ràng hơn.

Tất nhiên với ruby ​​1.9 và định dạng băm mới, chúng ta có thể rút ngắn 3 ký tự với ...

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

1
Hoặc <% = f.hidden_field: term_id ,: value => @ giao
dịch.term_id

2
Đây phải là câu trả lời được chấp nhận. Mặc dù câu hỏi hỏi về hình thức đơn giản, không có lý do để sử dụng nó khi điều này hoàn thành chính xác điều tương tự với một cú pháp ngắn hơn.
Greg Blass

5
= f.input_field :title, as: :hidden, value: "some value"

Cũng là một lựa chọn. Tuy nhiên, lưu ý rằng nó bỏ qua bất kỳ trình bao bọc nào được xác định cho trình tạo biểu mẫu của bạn.


5

Cách chính xác (nếu bạn không cố gắng đặt lại giá trị của đầu vào hidden_field) là:

f.hidden_field :method, :value => value_of_the_hidden_field_as_it_comes_through_in_your_form

Ở đâu :method là phương thức mà khi được gọi trên đối tượng sẽ dẫn đến giá trị bạn muốn

Vì vậy, theo ví dụ trên:

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

Mã được sử dụng trong ví dụ sẽ đặt lại giá trị (: title) của @movie được truyền qua biểu mẫu. Nếu bạn cần truy cập giá trị (: title) của phim, thay vì đặt lại nó, hãy làm điều này:

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

Một lần nữa chỉ sử dụng câu trả lời của tôi là bạn không muốn đặt lại giá trị được gửi bởi người dùng.

Tôi hy vọng điều này có ý nghĩa.


1
Đối với simple_form_for, hiddenphương thức sử dụng ở đây sẽ gây ra lỗi undefined method ẩn 'cho # <SimpleForm :: FormBuilder: 0x00007ffa6cde0be8> `
Kiry Đo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.