我正在使用Forem gem安装论坛。有一个选项允许头像个性化,因为它可以登录Facebook。您只需在用户模型中指定您的方法就可以了。
# Forem initializer
Forem.avatar_user_method = 'forem_avatar'
# User model
def forem_avatar
unless self.user_pic.empty?
self.user_pic
end
end
但我希望Gravatar能够回归正常的非Facebook帐户。 I've found the method on Forem理论上,我需要调用avatar_url
方法:
# User model
def forem_avatar
unless self.user_pic.empty?
self.user_pic
else
Forem::PostsHelper.avatar_url self.email
end
end
但是,Forem不是一个实例,而是一个模块,我无法调用它,也无法创建新实例。简单的方法是复制该方法的行,但这不是重点。有办法吗?
由于
这两个答案都是正确的,但是当我以任一方式调用该方法时,会出现undefined local variable or method 'request'
错误,这是原始avatar_url
的最后一行。
有没有办法像PHP一样全局化该对象?我是否必须手动传递该参数?
答案 0 :(得分:4)
也许会重新打开这样的模块:
module Forem
module PostsHelper
module_function :avatar_url
end
end
然后致电Forem::PostsHelper.avatar_url
如果avatar_url
调用其他模块方法,则必须通过module_function
或仅在您的课程中使用include Forem::PostsHelper
并直接使用avatar_url
,而不使用Forem::PostsHelper
命名空间
答案 1 :(得分:2)
如果您希望能够在用户类中使用这些方法,请包含它们并使用
class User < ActiveRecord::Base
include Forem::PostsHelper
def forem_avatar
return user_pic if user_pic.present?
avatar_url email
end
end
答案 2 :(得分:1)
另一种方法是动态设置Forem.avatar_user_method
,因为Forem代码在使用之前检查它是否存在,如果不是,则默认为avatar_url
。
class User < ActiveRecord::Base
# This is run after both User.find and User.new
after_initialize :set_avatar_user_method
# Only set avatar_user_method when pic is present
def set_avatar_user_method
unless self.user_pic.empty?
Forem.avatar_user_method = 'forem_avatar'
end
end
def forem_avatar
self.user_pic
end
end
这样你就不会使用来自Forem的不必要的方法来污染你的模型,也不要修补Forem本身。