2013-07-10 4 views
0

Приложение работало нормально, пока мы не добавили блог. Затем у нас начались некоторые проблемы с маршрутизации. Каждая ссылка на navbar все еще работает нормально, включая ссылку на блог, которая открывает индекс всех сообщений. Когда вы нажимаете на одну из ссылок, чтобы перейти к определенной записи, страница отобразится, как и должно быть. Но для того, чтобы пользователь мог сделать комментарий, ему необходимо войти в систему или зарегистрироваться. Итак, мы помещаем две ссылки на страницу. Проблема заключается в том, когда вы нажимаете на одну из этих ссылок, или любой другой ссылке на панели навигации, вы получите сообщение об ошибке, типичное сообщение выглядит следующим образом:Проблемы с маршрутизацией в Rails при добавлении компонента Blog

Не удалось найти сообщение с идентификатором = логин

На данный момент мы больше не в корне. В этом случае, в адресной строке гласит:

http://localhost:3000/posts/login 

Единственный способ добраться до корня, нажав на ссылку «Назад» на странице, которая принимает пользователя на индексную страницу Блог.

Это то, что мой файл маршрутов выглядит следующим образом:

Septactus::Application.routes.draw do 
    devise_for :admins 
    devise_for :users, :path => "auth", :path_names => { 
                :sign_in => 'login', 
                :sign_out => 'logout', 
                :password => 'secret', 
                :confirmation => 'verification', 
                :unlock => 'unblock', 
                :registration => 'register', 
                :sign_up => 'cmon_let_me_in' 
                } 
devise_for :users, :controllers => {:registrations => 'registrations'} 

match '/home',   :to => 'site_pages#home' 
match '/about',  :to => 'site_pages#about' 
match '/bookshelf', :to => 'books#index' 
match '/blog',   :to => 'posts#index' 
match '/icasts',  :to => 'site_pages#icasts' 
match '/portfolio', :to => 'site_pages#portfolio' 

devise_scope :user do 
    match "login", :to => 'devise/sessions#new' 
    match 'logout', :to => 'devise/sessions#destroy' 
    match 'signup', :to => 'devise/registrations#create' 
end 

resources :site_pages 
resources :books 
resources :users 
resources :posts do 
    resources :comments 
end 

root :to => 'site_pages#home' 

end 

любой ключ, любой?

+0

Просьба показать код представления, который генерирует ссылку на 'posts/login' – jdl

+0

. См. Мой следующий пост для кода просмотра. – Adam

ответ

0

я наконец-то удалось решить эту проблему. А вот решение для тех, кто может прийти через него в будущем:

Как всем известно, Rails маршрутизации использует контроллер # действия, чтобы определить маршрут к странице: например: страницы # дома

Если вы выходите за пределы контроллера (в этом случае «страницы»), который является корнем, чтобы перейти на другую страницу/ссылку на другом контроллере, например контроллер сообщений и попытаться найти страницу на контроллере «страниц» , такие как:

 http://localhost:3000/posts/about 

вы получите сообщение об ошибке. Это связано с тем, что route.rb не содержит пути к этой ссылке, откуда вы находитесь, поэтому вы должны сказать, как туда добраться. То есть именно то, что я сделал:

Вот маршруты (нетронутый) для site_pages' контроллера: [HTTP: // локальный: 3000]

match '/home',   :to => 'site_pages#home' 
match '/about',  :to => 'site_pages#about' 
match '/bookshelf', :to => 'books#index' 
match '/blog',   :to => 'posts#index' 
match '/icasts',  :to => 'site_pages#icasts' 
match '/portfolio', :to => 'site_pages#portfolio' 

Вот новые маршруты для сообщений контроллера запрошенный от этого контроллера: HTTP: // локальный: 3000/сообщений/[идентификатор]/

match "/posts/home(.:format)"  => "site_pages#home", :as  => :home 
match "/posts/about(.:format)"  => "site_pages#about", :as  => :about 
match "/posts/bookshelf(.:format)" => "books#index", :as   => :bookshelf 
match "/posts/blog(.:format)"  => "posts#index", :as  => :blog 
match "/posts/icasts(.:format)" => "site_pages#icasts", :as => :icasts 
match "/posts/portfolio(.:format)" => "site_pages#portfolio",:as => :portfolio 

А вот маршруты Наметить «логин», «выход из системы» и «Signup» ссылки, идущие от должностей '(последние 3 строки):

devise_scope :user do 
    match "login",   :to => 'devise/sessions#new' 
    match 'logout',   :to => 'devise/sessions#destroy' 
    match 'signup',   :to => 'devise/registrations#create' 
    match "/posts/login", :to => "devise/sessions#new" 
    match "/posts/logout", :to => "devise/sessions#destroy" 
    match "/posts/signup", :to => "devise/sessions#create" 
end 

NB. Если ссылки Devise не завернуты в область разработки, Rails вернет ошибку.

Надеюсь, это поможет.

1

Вот проблема в этой строке:

<p>To add a comment, <%= link_to 'Login', 'login' %> or <%= link_to 'Signup', "signup" %></p> 

вам нужно изменить, чтобы

<p>To add a comment, <%= link_to 'Login', login_path %> or <%= link_to 'Signup', signup_path %></p> 
+0

Нет. Это не помогло. На самом деле это ухудшилось. Я даже не мог получить доступ к каким-либо моим сообщениям. Спасибо за попытку. – Adam

+0

Можете ли Вы, пожалуйста, поделиться своим мнением? –

+0

Вы можете просмотреть код здесь: http://jsfiddle.net/adam0964/VLNhs – Adam

Смежные вопросы