Как сделать текстовое поле в rails haml - PullRequest
0 голосов
/ 03 июля 2018

Я хочу отобразить текстовое поле с конкретными параметрами. Когда я использую:

%input{:type=>"text", :name => "search_name",:maxlenght => "200" ,:class => "text_field", :placeholder => t("homepage.save_search.save_field_placeholder") }

Все работает хорошо, и сгенерированный HTML-это то, что я хочу:

<input class="text_field" maxlenght="200" name="search_name" placeholder="Search name" type="text">

Но когда я использую следующий синтакс:

=text_field :search_name, :maxlenght => "200", :class => "text_field", :placeholder => t("homepage.save_search.save_field_placeholder")

Генерирует следующий html:

<input type="text" name="search_name[{:maxlenght=>&quot;200&quot;, :class=>&quot;text_field&quot;, :placeholder=>&quot;Search name&quot;}]" id="search_name_{:maxlenght=>&quot;200&quot;, :class=>&quot;text_field&quot;, :placeholder=>&quot;Search name&quot;}">

Читая другие примеры rails и haml-файлов, генерирующих текстовое поле, я подумал, что оба решения эквивалентны. Кто-нибудь может объяснить разницу?

1 Ответ

0 голосов
/ 03 июля 2018

Если в предыдущей строке вы создаете текстовое поле, последний синтаксис является помощником, используемым при работе с объектами. Взгляните на text_field помощник по формам подпись метода

text_field(object_name, method, options = {}) public

Для этих помощников первый аргумент - это имя переменной экземпляра, а второй - имя метода (обычно атрибута) для вызова этого объекта. Rails установит значение элемента управления вводом в значение, возвращаемое этим методом для объекта, и установит соответствующее имя ввода. Если ваш контроллер определил @person и имя этого человека - Генри, тогда форма, содержащая:

<%= text_field(:person, :name) %>

выдаст результат, аналогичный

<input id="person_name" name="person[name]" type="text" value="Henry"/>

источник

...