【问题标题】:Rails - Using an argument as a model attributeRails - 使用参数作为模型属性
【发布时间】:2011-10-20 15:58:14
【问题描述】:

这是我的看法:

<%= 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。但是,当然,我希望能够将助手用于其他属性。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 我没有使用布尔字段,因为我必须为我想要切换的每个属性创建一个单独的列。相反,我为每个拥有信息的用户设置了一个首选项列...我对其进行了测试,@user.preferences.age_visible == "1" 可以在视图中使用,但帮助程序看起来更干净。
    【解决方案2】:

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

    @user.preferences.send(:age_visible)
    

    让你的助手更简洁的小提示:

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

    已经返回一个布尔值,所以你可以像这样重写你的助手:

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

    【讨论】:

    • 太棒了!感谢你及时的答复。正是我想要的。
    • @Lee,其实我觉得 Davidb 下面的回答更好。
    • 在下面查看我的回复...我没有为每个属性使用单独的列,而是使用 OpenStruct 的首选项列。
    • 太好了,我将更新帮助程序以使其更简洁。
    猜你喜欢
    • 1970-01-01
    • 2018-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-14
    • 2016-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多