Одинаковый формат URL в разных контроллерах с ruby ​​на рельсах - PullRequest
0 голосов
/ 03 мая 2019

У меня проблемы с маршрутизацией в ruby ​​на рельсах. У меня одинаковый формат URL на разных контроллерах, и я пытаюсь отправить параметры на site controller, но вместо этого он идет на pages controller. Любая помощь?

Route.rb

resources :sites, :path => '', :except => [:index] do
  resources :pages, :path => '' do
  end
end

Когда я запускаю команду rails routes, я получаю что-то похожее на:

site_pages GET    /:site_id(.:format)            pages#index
site GET          /:id(.:format)                 sites#show

View

<%= link_to 'GO', site_path(site) %>

Этот код должен идти к site#show, но он идет к pages#index и выдает следующее сообщение об ошибке:

 NoMethodError in PagesController#index 
 undefined method `site_id' for nil:NilClass

 Parameters:
 {"site_id"=>"site A"}

Я пробовал:

<%= link_to '', site_path(site), :controller => "sites", :action => "show"%>

<%= link_to '', site_path(id: site.id)%>

но это не работает. Любая помощь будет очень признателен

Ответы [ 2 ]

0 голосов
/ 04 мая 2019

Поскольку страницы вложены в сайты, вам (как правило) нужен сайт, чтобы иметь страницы. Для этого в вашем сценарии удалите :path => '' из ресурса pages. Это даст вам маршруты, которые выглядят так:

site_pages GET    /:site_id/pages(.:format)          pages#index
site       GET    /:id(.:format)                     sites#show

Тогда вам понадобится идентификатор сайта в любое время, когда вы захотите получить доступ / создать его страницы. Имейте в виду, однако, что если вы пройдете маршрут типа mydomain.com/anything_here, вы будете перенаправлены на сайты # show action.

0 голосов
/ 03 мая 2019

В дополнение к комментарию @ jvillian, ваши маршруты не работают.

Представьте, что пользователь хочет видеть сайт с id 1. Он может ввести URL my_domain.com/1.Теперь она хочет проверить страницы этого сайта, поэтому она набирает my_domain.com/1.Как Rails может знать, на что она ссылается?

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