我有一个Rails辅助方法......
def current_user
@user = User.find(cookies[:user_id]) if cookies[:user_id]
end
我想为它添加一个非数据库属性......
self.custom_property = true
所以我可以在我看来访问它。
<%= current_user.custom_property %>
但是,Rails说“Undefined method:custom_property”
这是完整的代码:
def current_user
@user = User.find(cookies[:user_id]) if cookies[:user_id]
@user.ribbon_array ||= []
self.is_moderator = @user.ribbon_array.include?(1) ? true : false
end
我想这样做,所以在我看来我可以查看current_user.is_moderator。在我的代码的其他地方,我有一个特定于每个页面的@is_moderator变量,但是这个变量将在整个应用程序中使用,特定于current_user,而不是配置文件中的用户。
答案 0 :(得分:1)
完成此任务
我想这样做,所以我认为我可以检查 current_user.is_moderator。在我的代码的其他地方,我有一个 @is_moderator变量,它特定于每个页面,但是这个 将在整个应用程序中使用,特定于current_user 与个人资料中的用户相对。
我建议您在名为
的用户模型上实现一种方法def is_moderator_of(page)
# returns true or false here
end
或者更好的是,使用像cancan
这样的授权gem编辑:
另外,这个
@user = User.find(cookies[:user_id]) if cookies[:user_id]
@user.ribbon_array ||= []
如果没有cookie,将生成“找不到方法:ribbon_array为nil”[:user_id]
答案 1 :(得分:0)
在你的app / models / user.rb文件中:
class User << ActiveRecord::Base
attr_accessor :custom_property
...
end
然后您的视图代码应该可以工作。
或者,你可以在帮助器中设置@custom_property = true,并在视图中使用@custom_property。
答案 2 :(得分:0)
修改强>
我没有太多想法。在这种情况下,更好的解决方案是添加另一个辅助方法。助手本身不是那么面向对象,所以你也应该能够容忍这种解决方案。
def current_user
@current_user = User.find(cookies[:user_id]) if cookies[:user_id]
end
def is_moderator?
ribbon = @current_user.ribbon_array || []
ribbon.include?(1)
end