将多个参数发送到ruby中的另一个函数

时间:2013-06-04 14:39:05

标签: ruby-on-rails ruby ruby-on-rails-4

我正在尝试创建一个为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)。我怎么能正确地做到这一点?

2 个答案:

答案 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