default_url_options and rails 3

后端 未结 5 563
难免孤独
难免孤独 2020-11-29 05:50

As ActionController::Base#default_url_options is deprecated, I wonder how to set default url options in rails3. The default url options are not static but dependent of the c

相关标签:
5条回答
  • 2020-11-29 06:30

    I believe the preferred method is to now tell the router to handle this:

    Rails.application.routes.default_url_options[:foo]= 'bar' 
    

    You can put this line in either routes.rb or an initializer. Whichever you would prefer. You could even put it in your environment configs if the values change based on your environment.

    0 讨论(0)
  • 2020-11-29 06:39

    Rails.application.routes.default_url_options[:host]= 'localhost:3000'

    In the developemnt.rb / test.rb, can be more concise as following:

    Rails.application.configure do
      # ... other config ...
    
      routes.default_url_options[:host] = 'localhost:3000'
    end
    
    0 讨论(0)
  • 2020-11-29 06:45

    For Rails 3 specifically, the canonical way to do it is by adding a default_url_options method to your ApplicationController.

    class ApplicationController < ActionController::Base
      def default_url_options
        {
            :host => "corin.example.com",
            :port => "80"  #  Optional. Set nil to force Rails to omit
                           #    the port if for some reason it's being
                           #    included when you don't want it.
        }
      end
    end
    

    I just had to figure this out myself, so I know it works.

    This is adapted from the Rails 3 Guide:
    http://guides.rubyonrails.org/v3.2.21/action_controller_overview.html#default_url_options

    0 讨论(0)
  • 2020-11-29 06:50

    That apidock.com link is misleading. default_url_options is not deprecated.

    http://guides.rubyonrails.org/action_controller_overview.html#default_url_options

    0 讨论(0)
  • 2020-11-29 06:51

    To set url options for current request use something like this in your controller:

    class ApplicationController < ActionController::Base
    
      def url_options
        { :profile => current_profile }.merge(super)
      end
    
    end
    

    Now, :profile => current_profile will be automerge to path/url parameters.

    Example routing:

    scope ":profile" do
      resources :comments
    end
    

    Just write:

    comments_path
    

    and if current_profile has set to_param to 'lucas':

    /lucas/comments
    
    0 讨论(0)
提交回复
热议问题