При использовании simple_form в Rails, как я могу использовать его только для отображения данных для некоторых полей, а не для ввода?

Я создаю свои формы, используя simple_form, и все хорошо, за исключением случаев, когда я хочу просто отобразить некоторый текст, а не показывать поле ввода какого-либо типа. Поэтому мне нужно показать метку, а также отображаемый текст, например. Имя : Крис, где «Имя» — это метка, а «Крис» — отображаемый текст.

Итак, представьте, что у меня есть simple_form :

=simple_form_for @property do |f|
  =f.display_field "Contact Name",  "Chris"
  =f.input :customer_reference
  =f.input :premises_description
  =f.input :po_number, :label=>"Purchase Order Number"

"f.display_field" - это искусственный метод, но я представляю, как он будет выглядеть, что мне нужно. Все, что он будет делать, это показывать метку и некоторый текст рядом с ней. Каков самый простой способ добиться этого?

Ура Крис


person cmrichards    schedule 11.02.2012    source источник


Ответы (3)


Я использую пользовательский ввод для этой цели:

class FakeInput < SimpleForm::Inputs::Base
  # This method usually returns input's html like <input ... />
  # but in this case it returns just a value of the attribute.
  def input
    @builder.object.send(attribute_name)
  end
end

Если вы разместите его где-нибудь, например, в app/inputs/fake_input.rb, вы сможете использовать его в своих простых формах:

= simple_form_for @property do |f|
  = f.input :contact_name, :as => :fake

Тип ввода получается из имени класса ввода (без подчеркивания «Ввод»). Итак, для FakeInput это :fake.

person Simon Perepelitsa    schedule 11.02.2012
comment
Не забудьте перезапустить сервер Rails, чтобы новый каталог app/inputs был выбран. - person Simon Perepelitsa; 11.02.2012
comment
Можно ли обернуть текст в диапазон и передать какой-либо атрибут этому диапазону? - person Xiong; 10.06.2014
comment
Вы можете использовать обычные вспомогательные методы с def input по template. Например, template.content_tag('span', @builder.object.send(attribute_name)). - person Simon Perepelitsa; 10.06.2014

Чтобы отобразить обычный текст вместо ввода, просто передайте блок (и дополнительную метку, если это не атрибут модели):

= simple_form_for @property do |f|
  = f.input :contact_name, label: "Contact Name" do 
    Chris
  = f.input :customer_reference
  = f.input :premises_description
  = f.input :po_number, :label => "Purchase Order Number"

Это просто выведет Chris в том же месте, где в противном случае был бы ввод.

person Markus    schedule 13.01.2016

Если я правильно вас понял:

=simple_form_for @property do |f|
  Contact Name:
  [email protected]_name
  =f.input :customer_reference
  =f.input :premises_description
  =f.input :po_number, :label=>"Purchase Order Number"
person bblack    schedule 11.02.2012
comment
Это не будет форматировать поле с помощью div (и остальных), как это делает simple_form с обычными полями. - person cmrichards; 03.07.2015