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

説明:

product_image_tag(product, :a => '1', :b => '2', :c => '3', ...)最後のパラメーターを空のハッシュに設定することは、一般的なRubyイディオムです。これは、残りの引数を明示的にハッシュにすることなく、のようなメソッドを呼び出すことができるためです{}

options[:size] ||= "200x200"メソッドに渡されなかった場合は、:sizeパラメーターを200x200に設定します。

if img = product.product_images.first--Rubyを使用すると、条件内で割り当てを行うことができます。これはすばらしいことです。この場合、product.product_images.firstnil(画像なし)を返す場合は、placehold.itリンクにフォールバックします。それ以外の場合は、最初の画像を表示します。

于 2010-09-14T20:44:37.943 に答える