代码之家  ›  专栏  ›  技术社区  ›  yalestar

Rails图像助手的可选参数

  •  3
  • yalestar  · 技术社区  · 14 年前

      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) %>
    

    换句话说,我希望这个helper方法能够接受一个可选的size参数。最好的办法是什么?

    1 回复  |  直到 14 年前
        1
  •  10
  •   Robert Speicher    14 年前

    你在正确的轨道上。我会这样做:

    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"

    if img = product.product_images.first -Ruby让你在一个条件下做作业,这太棒了。在这种情况下,如果 product.product_images.first 返回nil(无图像),则返回placehold.it公司链接,否则显示第一个图像。