2010-07-12 21 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