Rails:如何从视图助手和控制器中获取匹配方法选项?

时间:2013-04-14 15:04:19

标签: ruby-on-rails rails-routing

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方法选项?

2 个答案:

答案 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的回答中有解释。