【问题标题】:Optional parameters for Rails Image HelperRails Image Helper 的可选参数
【发布时间】:2011-04-12 08:46:09
【问题描述】:

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

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

【问题讨论】:

    标签: ruby-on-rails ruby helpers


    【解决方案1】:

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

    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 =&gt; '1', :b =&gt; '2', :c =&gt; '3', ...) 这样的方法,而无需使用 {} 显式地将剩余参数设置为散列。

    options[:size] ||= "200x200" 将 :size 参数设置为 200x200 如果没有传递给方法。

    if img = product.product_images.first - Ruby 允许您在条件内进行赋值,这太棒了。在这种情况下,如果product.product_images.first 返回 nil(无图像),则返回到您的 placehold.it 链接,否则显示第一张图像。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-04
      • 1970-01-01
      • 1970-01-01
      • 2015-12-07
      • 1970-01-01
      相关资源
      最近更新 更多