2013-07-10 35 views
0

該應用工作正常,直到我們添加了博客。然後,我們開始有一些路由問題。導航欄上的每個鏈接仍然正常工作,包括博客鏈接,該鏈接將打開所有帖子的索引。當您點擊其中一個鏈接轉到特定的帖子時,該頁面會顯示,因爲它應該。但是,爲了讓用戶發表評論,他/她需要登錄或註冊。所以,我們在頁面上放置了兩個鏈接。問題是,當你點擊這些鏈接,或者在導航欄任何其他的環節之一,你會得到一個錯誤信息,一個典型的信息如下:在添加博客組件時在Rails中路由問題

無法使用id =登錄後發現

在這一點上,我們不再是根源。在這種情況下,在地址欄上寫着:

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

我終於設法解決這個問題

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

。這裏是爲那些誰在將來可能會遇到它的解決方案:

殊不知,Rails的路由使用控制器#操作以指定的路線到頁:例如:網頁#家

如果您超出控制器的界限(在這個例子中是'頁面'),這是根,到另一個控制器上的另一個頁面/鏈接,例如帖子的控制器,並嘗試訪問'網頁'控制器上的頁面,如:

 http://localhost:3000/posts/about 

你會收到一個錯誤。這是因爲routes.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 /職位/ [ID]/

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 

這裏是制定「登錄」,「註銷」從帖子去的路線,和「註冊」鏈接'控制器(最後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 

注意:如果Devise鏈接未包含在Devise範圍內,則Rails將返回錯誤。

我希望這會有所幫助。

1

下面是該行的問題:你需要改變

<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