How best to DRY will_paginate options

狂风中的少年 提交于 2019-12-21 04:08:45

问题


I have 8 controllers using will_paginate to paginate their index pages. I'd like to override the defaults for "Previous" and "Next" on each without having to specify the same options 8 times. Is there a way to override the defaults only once (perhaps by subclassing will_paginate).


回答1:


will_paginate uses I18n so you can just use that. Given you use English as the default locale the following line should be present in application.rb:

config.i18n.default_locale = :en

you can then change the text of the pagination links by adding the following to config/locales/will_paginate.en.yml:

en:
  will_paginate:
    previous_label: "← go back"
    next_label: "go forward →"

Alternatively you can add them to your default translations file: config/locales/en.yml but I have found that it quickly becomes to large to handle.

Note: If you use another locale, for instance es, for this to work you need to at least replace the en: keys within the YAML files to es: and to be concise about naming your files, use either config/locales/will_paginate.es.yml or config/locales/es.yml.




回答2:


I'm assuming you're doing something like this in your controllers:

will_paginate @collection, :previous_label => '< go back', :next_label => 'go forward >'

Your problem is that you want to use these labels everywhere in your application, so it's pointless to repeat them. In that case, you could define a helper like this:

def paginate(collection, options = {})
  defaults = {
    :previous_label => '< go back',
    :next_label     => 'go forward >',
  }
  options = defaults.merge(options)

  will_paginate collection, options
end

After that, calling paginate @collection in your views will use your defaults and still let you override them if necessary.

EDIT: suweller's response is definitely the better way to go in this case, especially considering it's approved by mislav, the plugin creator :). I'd completely forgotten about the translation file option. My solution could probably be useful in the general case, when the helper is not configurable in a similar way.



来源:https://stackoverflow.com/questions/7073789/how-best-to-dry-will-paginate-options

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!