Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何为url帮助器方法的参数设置默认值?_Ruby On Rails_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 如何为url帮助器方法的参数设置默认值?

Ruby on rails 如何为url帮助器方法的参数设置默认值?,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我使用语言代码作为前缀,例如www.mydomain.com/en/posts/1。 这就是我在routes.rb中所做的: scope ":lang" do resources :posts end 现在我可以很容易地使用url帮助程序,例如:post\u路径(post.id,:lang=>:en)。问题是我想使用cookie中的值作为默认语言。所以我可以只写post\u路径(post.id) 有没有办法为url帮助程序中的参数设置默认值?我找不到url帮助程序的源代码-有人能告诉我正确

我使用语言代码作为前缀,例如
www.mydomain.com/en/posts/1
。 这就是我在routes.rb中所做的:

scope ":lang" do
  resources :posts
end
现在我可以很容易地使用url帮助程序,例如:
post\u路径(post.id,:lang=>:en)
。问题是我想使用cookie中的值作为默认语言。所以我可以只写
post\u路径(post.id)

有没有办法为url帮助程序中的参数设置默认值?我找不到url帮助程序的源代码-有人能告诉我正确的方向吗

另一种方法:我已经尝试在routes.rb中设置它,但它仅在启动时进行评估,这对我不起作用:

scope ":lang", :defaults => { :lang => lambda { "en" } } do
  resources :posts
end

这是我头脑中的代码,所以不能保证,但请尝试使用初始值设定项:

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)
或者直接的猴子补丁

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

url_for的代码位于Rails 3.0.7的actionpack/lib/routing/url_for.rb中,Ryan Bates在今天的railscast中介绍了这一点:

您可以在此处找到url_的源:

您将看到它将给定的选项与url\u选项合并,后者依次调用默认的url\u选项

将以下方法作为私有方法添加到应用程序_controller.rb中,您应该进行设置

def locale_from_cookie
  # retrieve the locale
end

def default_url_options(options = {})
  {:lang => locale_from_cookie}
end

上面的多斯特几乎已经明白了。该版本的默认url选项不会很好地与其他选项配合。您希望增加而不是删除传入的选项:

def locale_from_cookie
  # retrieve the locale
end

def default_url_options(options = {})
  options.merge(:lang => locale_from_cookie)
end

酷,我不知道每次调用url助手时都会调用url_for!谢谢。不过,方法的url\u不止一个。我必须将的url_移动到ApplicationController中,并将其设置为helper_方法,否则它将无法工作。但是你的想法还是有帮助的,谢谢。当你试图为一个新模块中不存在的方法添加别名时,顶级方法不起作用