0

Rails 中有一个match方法专门用于设置路由。它有几个选项::controller:action:via等。其中之一是: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在控制器中获取所有这些方法选项?

4

2 回答 2

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))
于 2013-04-14T15:06:21.850 回答
0

:as选项与路线名称无关。你可以完美地拥有这个:

get "myprefix/user/hello' => "users#show", as: 'user_hello'

但是,如果你想做一些事情,比如在自定义前缀下对一定数量的路由进行分组,你应该对命名空间做一些事情,这在 @Avdept 的回答中进行了解释。

于 2013-04-14T15:13:20.973 回答