2011-12-23 52 views
3

我想掛鉤一個具有默認類'pjax'的自定義助手,但也保留了在需要時添加類的能力。Rails 3 - 自定義link_to助手(具有默認類和添加類的能力)

例子:

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

所以助手將添加「pjax」在默認情況下,也是一流的「當前」,或無論是在通過

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

語法嚇壞。我出去了。任何意見將不勝感激。

+0

因此,在你的例子中,你是否希望它覆蓋'pjax'的默認類或將'current'類添加到'pjax'類(例如:'current pjax')? – Preacher 2011-12-23 01:43:30

回答

5
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 '點擊我',my_super_path,等級: 'AHAH',ID: '你好'
  • link_to_pjax '點擊我',my_super_path

我的壞...

+0

謝謝你。如果沒有:在原始link_to上指定class,我如何才能使它工作? – Galaxy 2011-12-23 02:04:54

+0

即使指定了no:class,第二種解決方案也能正常工作。 – Damien 2011-12-23 02:06:35

+0

我喜歡它。簡單,並且非常有意義。謝謝! – Galaxy 2011-12-23 02:08:22

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

我有一個漩渦,雖然它增加了'pjax'類,它似乎剝離我的課初始link_to – Galaxy 2011-12-23 01:52:56

+0

我的壞,我誤解了這個問題。 @ Delba的解決方案應該做你想做的。 – 2011-12-23 01:56:57

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 
相關問題