Rails - 使用参数作为模型属性

时间:2011-10-20 15:58:14

标签: ruby-on-rails attributes arguments helper argument-passing

以下是我的观点:

<%= 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,但如果我在帮助器中写出“@ user.preferences.age_visible”,它将传递true。但是,当然,我希望能够将帮助器用于其他属性。

2 个答案:

答案 0 :(得分:1)

你不需要任何额外的助手。在数据库中创建布尔字段时,ActiveRecords提供了一种方法来查询其是否设置为true。试试这个:

<%= check_box_tag :age_visible, 1, @user.age_visible? %>

答案 1 :(得分:0)

Davidb的回答是正确的,但是对于您想要动态调用方法的未来情况,您可以使用send。例如。像这样:

@user.preferences.send(:age_visible)

只需要一点小小的提示,让你的助手更简洁:

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

已经返回一个布尔值,因此您可以像这样重写助手:

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