我有一个看起来像这样的帮助方法:
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) %>
我的传递错误吗?感谢
答案 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})