3

在我当前的 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) %>

换句话说,我希望能够让这个辅助方法采用可选的大小参数。解决此问题的最佳方法是什么?

4

1 回答 1

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 链接,否则显示第一张图像。

于 2010-09-14T20:44:37.943 回答