Rails中有一个专用于设置路由的match方法。它有几个选项::controller
,:action
,:via
等。其中一个是:as
选项。
:as
用于生成路由助手的名称。
例如,我有这样的路线设置:
match("user/hello' => "users#show",
via: 'get',
:as => :user_hello,
)
这个:as
选项允许我在html.erb
模板中执行此操作:
<%= link_to("User Hello", user_hello_path()) %>
我在渲染页面中得到了这个:
<a href="user/hello">User Hello</a>
但我想更改此帮助程序的默认行为。我想为生成的url添加一些前缀,让它像这样:
<a href="myprefix/user/hello">User Hello</a>
问题是,如何在我的帮助模块文件中获取:as
变量:
# File: C:\MyApp\app\helpers\users_helper.rb
module UsersHelper
# I explicitly redefine the default helper
# but can't get :as option here
def user_hello_path
"myprefix/" + :as.to_s # <-- how to get the ":as" option here
end
end
如何在控制器中获取所有这些match
方法选项?
答案 0 :(得分:1)
你可以使用namespace
之类的东西
例如
namespace :yourprefix do
#your route here
end
这将返回"yourprefix/your_route"
关于你的方法 - 你可以将路径传递给你的方法
def user_hello_path(user_path)
"myprefix/" + user_path.to_s # <-- how to get the ":as" option here
end
和视图中的某个地方
user_hello_path(user_hello(@user))
答案 1 :(得分:0)
:as
选项与路线名称无关。你可以完美地拥有这个:
get "myprefix/user/hello' => "users#show", as: 'user_hello'
但是如果你想做一些事情,比如在自定义前缀下分组一定数量的路由,你应该对命名空间做一些事情,这在@ Avdept的回答中有解释。