我正试着从我的一个模特那里打电话给格雷瓦塔(是的,我意识到这并不是严格意义上的MVC,但我有一个合理的理由去做这件事,我不会去做)。我想把格拉瓦塔的帮手也包括进去,但我没能找到他们是什么。
到目前为止,像这样把它包含在我的课堂上是行不通的:
class AnnotationPostedActivity < NewsfeedActivity
include GravatarHelper::PublicMethods
最佳答案
假设您使用gravatar-plugin生成图像标记,则有几个问题需要克服注意,gravatar_for
方法将用户对象作为其第一个参数。
在GravatarHelper::PublicMethods
到<AnnotationPostedActivity
类中的所有实例都可以访问方法gravatar_for(user, options={})
。所以你会说:
alice = User.new()
alice.respond_to?(:gravatar_for)
=> true
alice.gravatar_for
ArgumentError: wrong number of arguments (0 for 1)
# (you need to supply an argument - the method got zero but was expecting one)
alice.gravatar_for(alice)
=> "<img class=\"gravatar\" alt=\"\" width=\"50\" height=\"50\" src=\"http://www.gravatar.com/avatar/70375a32ad79987b9bc00cb20f7d1c95?rating=PG&size=50\" />
# (not what we want at all)
你看,你必须提供
user
对象作为gravatar_for
方法的第一个参数所以你要做的就是一使用另一个宝石
提供一个模块来查看
self.email
而不是将其作为方法参数的模块。2自己实现方法
It's easy接下来就是already ruby code了您可能需要在
AnnotationPostedActivity
模型中包含一些Rails的助手>> gravatar_url '[email protected]`
NoMethodError: undefined method `h' for main:Object ....
>> require 'active_support/core_ext/string/output_safety'
=> true
>> include ERB::Util
=> Object
>> gravatar_url '[email protected]`
=> "http://www.gravatar.com/avatar/fbaf55d6c2618cafe0a759cfe85967e0?rating=PG&size=50"