Определите помощника URL в маршрутах рельсов - PullRequest
0 голосов
/ 19 сентября 2018

Раньше не нужно было использовать rail 'url helpers', но я пытаюсь реализовать что-то вроде Rails: URL / path с параметрами .Я не создавал никаких «ресурсов», но у меня сложилось впечатление, что я могу добавить имя 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/,, говорящее «Конечно, вместо _path иногда вы идетенужно _url ".Я неправильно их определяю?Да, я прочитал https://guides.rubyonrails.org/routing.html, и увидел немного о «3.16 прямых маршрутах», но это не совпадает с примерами, которые я «видел».

Ответы [ 4 ]

0 голосов
/ 19 сентября 2018

Я полагаю, что самым простым и обычным делом было бы:

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.

0 голосов
/ 19 сентября 2018

Должен признать, что официальная документация по маршрутизации Rails довольно краткая.Короче говоря, вы не можете указывать путь в вашем файле rout.rb .Вместо этого ваша строка должна выглядеть следующим образом:

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

Если вы сейчас посетите http://localhost:3000/rails/info/routes или наберете rails route в командной строке папки вашего проекта, вы увидитечто это дает вам помощник users_index_path (обратите внимание на множественное число).Если вы хотите, чтобы это было единственное число - как в исходном вопросе - добавьте опцию «как»:

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

Затем вы можете использовать user_index_path в шаблонах ваших представлений.

0 голосов
/ 19 сентября 2018

Вы неправильно определяете маршруты.

Попробуйте что-то вроде этого:

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

Тогда вы получите помощника, подобного этому: users_path

Но не делайте этого ........

Вы путаете действия контроллера с маршрутами?Никто не определяет маршрут как «индекс».Это просто предполагается.

То, что вы действительно хотите, будет примерно таким:

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

Тогда вы можете использовать users_path, чтобы получить набор пользователей.

Что он делает:

  • Определяет маршруты отдыха для ресурса пользователя.
  • указывает, к какому контроллеру перейти.
  • сообщает, к какомуДействия контроллера должны применяться (в этом случае только один).Если вы добавляете более спокойные маршруты, добавьте их также.Наконец, если вы реализуете целые 9 ярдов, просто удалите бит :only => [etc].
0 голосов
/ 19 сентября 2018

Маршруты можно называть как угодно.

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

(обратите внимание, что в нижнем регистре «get» вы видите на первой ссылке вывод команды rake routes, а не строку при определенииих)

Этот маршрут даст вам 2 именованных маршрута для использования: users_index_path и users_index_url (последний включает протокол, хост и порт).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...