2012-03-02 8 views
2

私はRuby(Ruby 1.9.3/RoR 3.2)の新機能です。私はグラバターを作成するためにこの関数を書いた。デフォルトのオプションを上書きせずにオプションのハッシュをどのように渡しますか?

def gravatar_for(user, options = { size: 50, default: 'identicon' }) 
    gravatar_id = Digest::MD5::hexdigest(user.email.downcase) 
    s = options[:size] 
    d = options[:default] 
    gravatar_url = "http://gravatar.com/avatar/#{gravatar_id}.png?s=#{s}&d=#{d}" 
    image_tag(gravatar_url, alt: user.name, class: 'gravatar') 
    end 

<%= gravatar_for user %>を呼び出す。 <%= gravatar_for user、size = 30%>を呼び出すと、デフォルトのオプションidenticonが失われます。これは、メソッド定義のハッシュが、呼び出し元から渡されているハッシュによって上書きされているためです。

いくつかのオプションを渡すことができるようにするにはどうすればよいですか?また、メソッド定義で指定されているものはデフォルトですか?私は<%= gravatar_for user, size: 30 %>に電話をかけ、その引数が呼び出し元から省略されていても、サイズが30で、identiconのスタイルのグラバターを返すようにします。

+0

:http://stackoverflow.com/questions/1980794/how-can-i-merge-two-hashesを - 上書きされない - 重複キー - ルビー – joeytwiddle

答えて

6

デフォルトのオプションハッシュを設定してから、mergeというオプションをユーザーがそのハッシュに渡すことができます。これは、ユーザーが指定したプロパティを上書きし、単独で他のすべてを残します:

2つのハッシュマージ
def gravatar_for(user, options = {}) 
    default = { size: 50, default: 'identicon' } 
    options = default.merge(options) 

end 
関連する問題