在rails中调用Helper方法时的未定义方法

时间:2015-05-27 09:41:39

标签: ruby-on-rails

我有以下帮助

module AvatarHelper

    # Todo: set a defatul profile-image-path
    DEFAULT_PROFILE_IMAGE_PATH = "http://image_here"

    def avatar_path(user, size = 24)
        ..
    end

    def get_facebook_profile_pic user, size
        ..
    end

    def get_gravatar_path user, size
        ..
    end

end

当我尝试在控制器中调用辅助方法时,会导致以下错误:

  

未定义的方法`avatar_path' for AvatarHelper:Module

这是我的控制器供参考:

class DashboardController < ApplicationController
    before_action :authenticate_user!

    def index
        @dashboard = Dashboard.new(current_user)
        puts AvatarHelper.avatar_path(current_user)
    end
end 

当我引用其他助手时,我发现他们不需要在别处引用助手。

module TitleHelper

    SITE_TITLE = 'My Site'
    TITLE_SEPARATOR = ' · '
    DESCRIPTION_CHARACTER_LIMIT = 140

    def title(*parts)
        parts << SITE_TITLE
        provide(:title, parts.compact.join(TITLE_SEPARATOR))
    end
end

然后我可以直接在视图中添加title方法。

<% title 'myPage' %>

3 个答案:

答案 0 :(得分:2)

无法直接调用模块方法。它们应该包含在要调用的类中。这就是为什么他们被称为mixins(他们可以和其他人混在一起)。

您可以在此处将模块包含在控制器中。

class DashboardController < ApplicationController
  include AvatarHelper

   def index
        @dashboard = Dashboard.new(current_user)
        puts avatar_path(current_user)
   end

end

答案 1 :(得分:1)

def self.avatar_path(user, size = 24)
        ..
end

你在mthod为你工作之前调用实例方法add self

答案 2 :(得分:1)

在帮助程序中添加以下代码。

module AvatarHelper
           extend ActiveSupport::Concern

现在您可以按名称

直接调用您的方法
puts avatar_path(current_user)