Rails - использование аргумента в качестве атрибута модели - PullRequest
1 голос
/ 20 октября 2011

Вот мой взгляд:

<%= check_box_tag :age_visible, 1, checked?(:age_visible) %>

Это вызывает метод помощника:

def checked?(pref)
  if @user.preferences.pref == "1"
    true
  else
    false
  end
end

Я хочу, чтобы помощник заявил:

if @user.preferences.age_visible == "1"

, так что это будетпроверьте базу данных, чтобы увидеть, если пользователь ранее выбрал показывать свой возраст, и если так, будет установлен флажок;иначе нет.Прямо сейчас он просто пропускает false, но пропускает true, если я напишу "@ user.preferences.age_visible" в помощнике.Но, конечно, я хочу использовать помощника для других атрибутов.

Ответы [ 2 ]

1 голос
/ 20 октября 2011

Вам не нужны никакие дополнительные помощники.При создании логического поля в базе данных ActiveRecords предоставляет метод для запроса, имеет ли оно значение true или нет.Попробуйте это:

<%= check_box_tag :age_visible, 1, @user.age_visible? %>
0 голосов
/ 20 октября 2011

Ответ Дэвида верен, но для будущих случаев, когда вы хотите вызывать метод динамически, вы можете использовать send. Например. как это:

@user.preferences.send(:age_visible)

Просто небольшой совет, чтобы сделать вашего помощника более лаконичным:

@user.preferences.send(pref) == "1"

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

def checked?(pref)
  @user.preferences.send(pref) == "1"
end
...