Rails - 将选项传递给方法

时间:2011-02-21 19:35:21

标签: ruby-on-rails ruby-on-rails-3

我有一个看起来像这样的帮助方法:

  def html_format(text, width=15, string="<wbr />", email_styling=false)

    if email_styling
       ...... stuff
    else
       ...... stuff
    end
       ...... stuff
  end

我在发送email_styling时遇到问题。以下是我在视图中所做的事情:

<%= html_format(@comment.content, :email_styling => true) %>

我的传递错误吗?感谢

3 个答案:

答案 0 :(得分:7)

您没有正确传递它。您需要执行以下操作:

<%= html_format(@comment.content, 15, '<wbr />', true) %>

或者,您可以使用选项哈希来传递参数:

def html_format(text, options = {})
  opt = {:width => 15, :string => '<wbr />', :email_styling => false}.merge(options)

  if opt[:email_styling]
    ...
  end
end

这样你就可以这样打电话:

<%= html_format(@comment.content, :email_styling => true) %>

答案 1 :(得分:2)

Ruby没有命名参数,所以你的方法调用:

html_format(@comment.content, :email_styling => true)

实际上正在调用(伪代码):

html_format(text = @comment, width = true)

您需要按顺序指定所有函数参数,即使它意味着冗余地传递一些默认值:

html_format(@comment.content, 15, '<wbr />', true)

答案 2 :(得分:1)

def html_format(text, user_options={})
  options = {
    :width => 15, 
    :string => "<wbr />", 
    :email_styling => false
  }
  options.merge!(user_options)
  if options[:email_styling]
    ...
  else
    ...
  end
  ...
end

<强> USAGE

html_format("MY TEXT", {:email_styling => true, :width => 20})