我有以下帮助
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' %>
答案 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)