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
。だからあなたがしなければならないことは
1. 別のジェムを使用する
self.email
メソッドパラメータとして要求するのではなく、見るモジュールを提供するもの。
2. メソッドを自分で実装する
簡単です。そして従うべきルビーコードはすでにあります。モデルに Rails のヘルパーをいくつか含める必要があるでしょう。AnnotationPostedActivity
>> gravatar_url 'github@deanandadie.net`
NoMethodError: undefined method `h' for main:Object ....
>> require 'active_support/core_ext/string/output_safety'
=> true
>> include ERB::Util
=> Object
>> gravatar_url 'github@deanandadie.net`
=> "http://www.gravatar.com/avatar/fbaf55d6c2618cafe0a759cfe85967e0?rating=PG&size=50"