2013-04-14 42 views
2

我有一个Rails的helper方法...我应该如何将自定义属性添加到rails帮助器方法?

def current_user 
    @user = User.find(cookies[:user_id]) if cookies[:user_id] 
    end 

而且我想一个非数据库属性添加到它...

self.custom_property = true 

所以我可以在我看来访问它。

<%= current_user.custom_property %> 

但是,Rails的说:“未定义的方法: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

@Joshua Scott答案是最好的。但是,如果您想分享为什么要尝试这样做,也许我们可以帮助您找出更好的方法? – fotanus

+0

@fotanus当然,我会编辑帖子。 –

回答

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 
+0

这看起来好像会起作用,但为ApplicationController:Class返回了未定义的局部变量或方法'current_user'。 –

+0

@ColbyAley,请检查我的更新。 –

0

在您的应用程序/模型/ user.rb文件:

class User << ActiveRecord::Base 
    attr_accessor :custom_property 
    ... 
end 

然后您的视图代码应工作。

或者,您可以在助手中设置@custom_property = true,并在视图中使用@custom_property。

+0

它仍然给我'未定义的方法'is_moderator ='为#' –

+0

因为您在控制器中运行self.is_moderator?你可以运行current_user.is_moderator。 –

1

要做到这一点

我希望做这样所以在我看来,我可以检查 current_user.is_moderator。在我的代码的其他地方,我有一个 @is_moderator变量,这个变量是特定于每个页面的,但是这个 将在整个应用中使用,并且特定于current_user,作为 与配置文件上的用户相对。

我建议你实现的方法对你叫

def is_moderator_of(page) 
    # returns true or false here 
end 

或用户模式更好,但使用授权的宝石一样cancan

编辑:

此外,这

@user = User.find(cookies[:user_id]) if cookies[:user_id] 
@user.ribbon_array ||= [] 

会产生“找不到方法:ribbon_array为零”如果没有cookie [:user_id]

相关问题