在Rails路线中定义URL帮助器

时间:2018-09-19 02:21:17

标签: ruby-on-rails ruby-on-rails-5

以前不需要使用rails的“ URL帮助器”,但是我正在尝试实现类似Rails: URL/path with parameters的东西。我没有创建任何“资源”,但给我的印象是,我可以在以下路径中添加url_helper名称:

user_index_path GET 'users/index', to: 'users#index'

但这会导致错误:

undefined method 'GET' for #<ActionDispatch::Routing::Mapper:0x00000007ABCDEF> Did you mean? gets gem

由于我没有太多使用它们,所以我对在这里读到的语句https://blog.arkency.com/all-the-ways-to-generate-routing-paths-in-rails/感到困惑,他说:“当然,有时您需要_url而不是_path”。我定义错误吗?是的,我读了https://guides.rubyonrails.org/routing.html,并看到了有关“ 3.16直接路线”的内容,但这与我所见过的示例并不一致。

4 个答案:

答案 0 :(得分:3)

您可以根据需要命名路线

#inside your routes.rb file
get 'users/index', to: 'users#index', as: 'users_index'

(请注意,在大写情况下,在第一个链接上看到的是命令rake routes的输出,而不是定义它们的行)

该路由将为您提供2条命名路由供使用:users_index_pathusers_index_url(后者包括协议,主机和端口)。

答案 1 :(得分:0)

我必须承认官方的Rails路由文档非常简洁。简而言之,您不能在 routes.rb 文件中添加路径。您的行应改为:

get 'users/index', to: 'users#index'

如果您现在访问 http://localhost:3000/rails/info/routes 或在项目文件夹的命令提示符下键入 rails route ,您将看到这为您提供了 users_index_path < / strong>助手(注意复数)。如果您希望单数形式(如您的原始问题一样),请添加“ as”选项:

get 'users/index',  to: 'users#index', as: 'user_index'

然后,您可以在视图模板中使用 user_index_path

答案 2 :(得分:0)

您定义的路线错误。

尝试这样的事情:

const $ = require('jquery')

然后您将获得这样的帮助者:get 'users/index' => "users#index", as: :users

但是不要那样做........

您是否将控制器操作与路由混淆?没有人将路线定义为“索引”。这只是假设。

您真正想要的是这样的东西:

users_path

然后,您可以使用resources :users, :controller => "users", :only => [:index]来获取用户集合。

它的作用:

  • 为用户资源定义静态路由。
  • 告诉您要去哪个控制器。
  • 告诉您要应用哪些控制器操作(在这种情况下,只有一个)。如果要添加更多宁静的路线,则也要添加它们。最后,如果要实现整个9码,则只需删除users_path位。

答案 3 :(得分:0)

我认为最简单,最常规的做法是:

get :users, to: 'users#index'

为您提供:

users GET    /users(.:format)    users#index

,然后将其用作users_path

(如果您想走resources路径,那么:

resources :users, only: [:index]

哪个还会给您:

users GET    /users(.:format)    users#index

拥有user_index_path是不寻常的,因为users_path暗含UsersController的索引动作。