【问题标题】:Define url helper in rails routes在 rails 路由中定义 url helper
【发布时间】:2019-02-23 02:40:48
【问题描述】:

以前不需要使用 rails 'url helpers',但我正在尝试实现类似 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 直接路由”的内容,但这与我“看到”的示例不符。

【问题讨论】:

  • 查看guide。如果您尝试将user_index_path GET 'users/index', to: 'users#index' 放入您的routes.rb,那么您就大错特错了。

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


【解决方案1】:

你可以随意命名路线

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

(注意“get”小写,您在第一个链接上看到的是命令rake routes 的输出,而不是定义它们时的行)

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

【讨论】:

  • 太棒了!让我处理一下这个问题,我会将其标记为已回答。
【解决方案2】:

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

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

如果您现在访问 http://localhost:3000/rails/info/routes 或在项目文件夹的命令提示符中输入 rails routes,您将看到这会为您提供 users_index_path 助手(注意复数)。如果您希望这是单数 - 就像您原来的问题一样 - 添加“as”选项:

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

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

【讨论】:

  • 谢谢,那个复数/单数的东西可能把事情搞混了。
【解决方案3】:

您定义的路线错误。

试试这样的:

get 'users/index' => "users#index", as: :users

然后你会得到一个这样的助手:users_path

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

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

你真正想要的是这样的:

resources :users, :controller => "users", :only => [:index]

然后您可以使用users_path 获取用户集合。

它的作用:

  • 为用户资源定义安静的路由。
  • 告诉您使用哪个控制器。
  • 告诉您要应用哪些控制器操作(在本例中只有一个)。如果您要添加更多宁静的路线,请同时添加它们。最后,如果您要实现整个 9 码,则只需删除 :only => [etc] 位即可。

【讨论】:

    【解决方案4】:

    我相信最简单和最传统的做法是:

    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 的索引操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-05
      相关资源
      最近更新 更多