在我目前的Rails(Rails 2.3.5,Ruby 1.8.7)应用程序中,如果我希望能够定义一个帮助器,如:
def product_image_tag(product, size=nil)
html = ''
pi = product.product_images.first.filename
pi = "products/#{pi}"
pa = product.product_images.first.alt_text
if pi.nil? || pi.empty?
html = image_tag("http://placehold.it/200x200", :size => "200x200")
else
html = image_tag(pi, size)
end
html
end
...然后使用以下任一方式从视图中调用它:
<%= product_image_tag(p) %>
...或:
<%= product_image_tag(p, :size => 20x20) %>
换句话说,我希望能够让这个辅助方法采用可选的大小参数。什么是最好的方法呢?
答案 0 :(得分:10)
你走在正确的轨道上。我会这样做:
def product_image_tag(product, options = {})
options[:size] ||= "200x200"
if img = product.product_images.first
image_tag("products/#{img.filename}", :alt => img.alt_text, :size => options[:size])
else
image_tag("http://placehold.it/#{options[:size]}", :size => options[:size])
end
end
说明:
将最终参数设置为空哈希是一种常见的Ruby习惯用法,因为您可以调用product_image_tag(product, :a => '1', :b => '2', :c => '3', ...)
之类的方法,而无需显式地将剩余的参数作为{}
的哈希值。
options[:size] ||= "200x200"
将:size参数设置为200x200,如果没有传递给方法。
if img = product.product_images.first
- Ruby允许你在一个条件内做任务,这太棒了。在这种情况下,如果product.product_images.first
返回nil(无图像),则返回到placehold.it链接,否则显示第一张图像。