2013-04-14 41 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]

相關問題