2010-07-12 46 views
0

我正在努力尋找幫助方法的正確位置。該方法基本上'檢查'用戶模型對象,並且應該返回關於用戶'進度'的一些信息,例如。 「您需要添加圖片」,「填寫您的地址」或「添加您的電子郵件地址」。我所檢查的任何條件都不是必需的,它就像是在LinkedIn上看到的「這是您的個人資料完整性」功能性。Rails-way - 這種輔助方法在哪裏?

這些「操作」中的每一個都有一個URL,用戶可以在其中完成行動,例如。他們可以上傳個人資料照片的頁面的URL,如果缺少的話。

因爲我需要訪問我的命名路由幫助程序(例如new_user_image_path)我很難搞清楚Rails構建代碼的方式。

我想用這樣的DSL返回一個對象:

class UserCompleteness 
    def initialize(user) 
    end 

    def actions 
     # Returns an array of actions to be completed 
    end 

    def percent 
     # Returns a 'profile completeness' percentage 
    end 
end 

而且用戶也有類似:@completeness = user_completeness(current_user)

但是,如果我加入這個我application_helper我不無法訪問我命名的路由助手。如果我將它添加到我的用戶模型,也一樣。

我應該在哪裏放置這種輔助方法?

+0

您應該可以訪問輔助方法中的命名路由(以及任何其他視圖助手),但是在您的模型UserCompleteness中無法訪問它們。 – Kris 2010-07-12 11:30:13

回答

0

這是一個類似的問題到郵件的。它們是模型,不應該跨越MVC邊界,但需要生成視圖。試試這個吧:

class UserCompleteness 

    include ActionController::UrlWriter 

    def initialize(user) 
    end 

    def actions 
    # Returns an array of actions to be completed 
    new_user_image_path(user) 
    end 

    def percent 
    # Returns a 'profile completeness' percentage 
    end 
end 

但是請注意你打破了MVC封裝,這可能會使測試變得更加困難。如果你可以在用戶助手中使用一些方法,而不是可能更好的類。

0

從小我有你的問題,我想你想要的方法,你可以在控制器以及視圖中使用。 爲了實現在application_controller.rb這個簡單的add方法並把它命名爲hepler_method

例子: -

class ApplicationController < ActionController::Base 
    helper_method :current_user 

    def current_user 
     @current_user ||= User.find_by_id(session[:user]) 
    end 

    end 

,你可以在兩個控制器使用方法current_user以及意見

+0

不是我的意思 - 抱歉:-)我的意思是放置需要使用命名路線的幫助器方法的位置。我只在我看來需要這個。 – Mattias 2010-07-12 11:35:03