我是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
Run Code Online (Sandbox Code Playgroud)
打电话的<%= gravatar_for user %>工作.调用<%= gravatar_for user,size = 30%>会导致默认选项identicon丢失.我假设这是因为方法定义中的哈希被我从调用者传入的哈希所覆盖.
我怎样才能这样做,以便我可以传递一些选项,而其他选项默认为方法定义中指定的内容?我想调用<%= gravatar_for user, size: 30 %>并让它返回一个大小为30且格式为的gravatar identicon,即使调用者省略了该参数.
您可以设置默认选项哈希,然后merge设置用户已传入该哈希的选项.这只会覆盖用户指定的属性,并保留其他所有内容:
def gravatar_for(user, options = {})
default = { size: 50, default: 'identicon' }
options = default.merge(options)
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
758 次 |
| 最近记录: |