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_方法,否则它将无法工作。但是你的想法还是有帮助的,谢谢。当你试图为一个新模块中不存在的方法添加别名时,顶级方法不起作用