我正在尝试创建一个为rails中的link_to函数添加一些功能的函数。我想要它做的只是添加一个类。到目前为止我所拥有的:
#application_helper.rb
def button_link(*args)
link_to(*args.push(class: 'btn'))
end
问题是如果我现在在button_link函数中添加另一个类,它就不起作用。
示例:
<td class='button'>
<%= button_link "Show", category_path(item), class: "btn-primary" %>
</td>
我收到以下错误:wrong number of arguments (4 for 3)
。我怎么能正确地做到这一点?
答案 0 :(得分:4)
link_to有4个方法签名。这是最常用的方法。
下面我们检查是否已经发送了一个类 - 并且由于HTML类的工作方式,我们希望有多个类,这些类是以空格分隔的值。
def button_link(body, url, html_options={})
html_options[:class] ||= ""
html_options[:class] << " btn"
link_to body, url, html_options
end
可以查看其他方法签名http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to
答案 1 :(得分:1)
尝试将辅助方法更改为此方法,尝试维护link_to表单:
def button_link(name, url_options, html_options = {})
if html_options.has_key?(:class)
css_options = html_options.fetch(:class)
css_options << ' current'
html_options.merge!( { :class => css_options } )
else
html_options.merge!( { :class => ' btn' } )
end
link_to(name, url_options, html_options)
end