Передайте опцию методу, только если условие истинно.Элегантный? - PullRequest
0 голосов
/ 19 ноября 2010

У меня есть часть, которая вставляет в мои формы соответствующий ввод в соответствии с типом атрибута модели. Я передаю массив имен атрибутов, и моя часть помещает поле form.text_field, где атрибут является строкой, а form.select, когда атрибут является целым числом (у меня также есть способ найти коллекцию текстовых значений, связанных с атрибутом) и так далее с датой и т. д.

Проблема в том, что частичное должно быть как можно более универсальным, поэтому я хочу проверить, есть ли у меня params [: search] [: attr_name] для установки значения по умолчанию, и если a его нет, я используйте вызов по умолчанию, который устанавливает значение модели в форме.

Конечно, я могу сделать что-то вроде этого (я использую HAML):

- if search_param(field)
  = form.text_field field, :value => search_param(field)
- else
  = form.text_field field

но это действительно ужасно. Существует любой способ передать опцию методу, только если условие истинно. Как то так.

= form.text_field field, (:value => search_param(field) ) if search_param(field)

Я пытался также сделать:

= form.text_field field, :value => search_param(field) || field.to_sym

но в поле ввода отображается "поле"

Идеи

Ответы [ 2 ]

0 голосов
/ 19 ноября 2010

Вот один из способов сделать это, используя тринарный оператор:

form.text_field *([field] + (search_param(field) ? [:value => search_param(field)] : []))
0 голосов
/ 19 ноября 2010

Я не уверен, нужен ли вам этот результат, но что если вы вместо field.to_sym используете model.send (field) для получения значения атрибута из модели? Так было бы что-то вроде этого:

= form.text_field field, :value => ( search_param(field) || model.send(field) )
...