Rails 3 - 自定义link_to帮助程序(具有默认类和添加类的能力)

时间:2011-12-23 01:38:14

标签: ruby-on-rails ruby-on-rails-3 helpers link-to

我正在尝试连接一个具有默认类'pjax'的自定义帮助程序,但也保留了在需要时添加类的功能。

示例:

link_to_pjax('pagename', page_path, :class => 'current')

因此,帮助器默认添加'pjax',以及类'current'或传入的任何内容。

def link_to_pjax(name, path, options = {:class => 'pjax'})
    link_to(name, path, options)
end

语法吓坏了我。任何建议将不胜感激。

3 个答案:

答案 0 :(得分:6)

def link_to_pjax(name, path, options)
  options[:class] += ' pjax'
  link_to(name, path, options)
end

修改

经过测试,它不那么优雅了:

 def link_to_pjax(name, path, options = {})
   options[:class] ? options[:class] += ' pjax' : options[:class] = 'pjax'
   link_to(name, path, options)
 end

我的第一个解决方案有效,但前提是您仍然指定了一个类。

最新作品适用于所有情况:

  • link_to_pjax'click me',my_super_path,class:'ahah',id:'hello'
  • link_to_pjax'click me',my_super_path

我的坏......

答案 1 :(得分:1)

def link_to_pjax(name, path, options={})
  default_options = { :class => "pjax" }
  link_to(name, path, options.merge(default_options))
end

答案 2 :(得分:0)

我改进了Delba的答案来处理link_to的块版本:

def link_to_pjax(*args, &block)
  if block_given?
    options      = args.first || {}
    html_options = args.second
    link_to_pjax(capture(&block), options, html_options)
  else
    name         = args[0]
    options      = args[1] || {}
    html_options = args[2] || {}
    html_options[:class] ? html_options[:class] += ' pjax' : html_options[:class] = 'pjax'
    link_to(name, options, html_options)
  end
end