我正试着从我的一个模特那里打电话给格雷瓦塔(是的,我意识到这并不是严格意义上的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&amp;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"

09-12 08:16