2013-06-04 45 views
2

我试图创建一个函数,在rails中为link_to函数添加一些功能。我想要做的只是添加一个类。我至今:发送多个参数到ruby中的另一个函数

#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'助手(期待3)。 – MrYoshiji

回答

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

试着改变你的辅助方法,这一点,试图保持的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 
相关问题