How to set defaults for parameters of url helper methods?

后端 未结 3 1426
盖世英雄少女心
盖世英雄少女心 2021-02-06 07:15

I use language code as a prefix, e.g. www.mydomain.com/en/posts/1. This is what I did in routes.rb:

scope \":lang\" do
  resources :posts
end


        
相关标签:
3条回答
  • 2021-02-06 07:46

    doesterr above has almost got it. That version of default_url_options won't play nice with others. You want to augment instead of clobber options passed in:

    def locale_from_cookie
      # retrieve the locale
    end
    
    def default_url_options(options = {})
      options.merge(:lang => locale_from_cookie)
    end
    
    0 讨论(0)
  • 2021-02-06 08:00

    This is coding from my head, so no guarantee, but give this a try in an initializer:

    module MyRoutingStuff
      alias :original_url_for :url_for
      def url_for(options = {})
        options[:lang] = :en unless options[:lang]   # whatever code you want to set your default
        original_url_for
      end
    end
    ActionDispatch::Routing::UrlFor.send(:include, MyRoutingStuff)
    

    or straight monkey-patch...

    module ActionDispatch
      module Routing
        module UrlFor
          alias :original_url_for :url_for
          def url_for(options = {})
            options[:lang] = :en unless options[:lang]   # whatever code you want to set your default
            original_url_for
          end
        end
      end
    end
    

    The code for url_for is in actionpack/lib/routing/url_for.rb in Rails 3.0.7

    0 讨论(0)
  • 2021-02-06 08:10

    Ryan Bates covered this in todays railscast: http://railscasts.com/episodes/138-i18n-revised

    You find the source for url_for here: http://api.rubyonrails.org/classes/ActionDispatch/Routing/UrlFor.html

    You will see it merges the given options with url_options, which in turn calls default_url_options.

    Add the following as private methods to your application_controller.rb and you should be set.

    def locale_from_cookie
      # retrieve the locale
    end
    
    def default_url_options(options = {})
      {:lang => locale_from_cookie}
    end
    
    0 讨论(0)
提交回复
热议问题