How best to DRY will_paginate options
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
.
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, optionsend
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.