我是Ruby的新手(Ruby 1.9.3 / RoR 3.2)。我写了这个函数来创建一个gravatar。
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 %>
有效。调用&lt;%= gravatar_for user,size = 30%&gt;导致默认选项identicon
丢失。我假设这是因为方法定义中的哈希被我从调用者传入的哈希覆盖。
如何制作它以便我可以传入一些选项,而其他选项默认为方法定义中指定的内容?我想调用<%= gravatar_for user, size: 30 %>
并让它返回一个大小为30且格式为identicon
的gravatar,即使调用者省略了该参数。
答案 0 :(得分:6)
您可以设置默认选项哈希,然后merge
设置用户已传入该哈希的选项。这只会覆盖用户指定的属性,并保留其他所有内容:
def gravatar_for(user, options = {})
default = { size: 50, default: 'identicon' }
options = default.merge(options)
end