该应用程序正常运行,直到我们添加了博客。然后,我们开始遇到一些路由问题。导航栏上的每个链接仍然可以正常工作,包括博客链接,它会打开所有帖子的索引。当您单击其中一个链接转到特定帖子时,页面将按原样显示。但是,为了让用户发表评论,他/她需要登录或注册。所以,我们在页面上放了两个链接。问题是,当您单击其中一个链接或导航栏上的任何其他链接时,您会收到一条错误消息,典型消息如下:
找不到具有id = login
的帖子此时,我们不再是根源了。在这种情况下,地址栏显示为:
http://localhost:3000/posts/login
到达root用户的唯一方法是单击页面上的“返回”链接,该链接将用户带回博客索引页面。
这是我的路线文件的样子:
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 :(得分: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>
答案 1 :(得分:0)
我终于设法解决了这个问题。对于那些将来可能会遇到它的人来说,这是一个解决方案:
众所周知,Rails路由使用controller#action指定到页面的路由:例如:pages#home
如果超出控制器的边界(在本例中为“页面”),这是根,可以到达另一个控制器上的另一个页面/链接,例如帖子&#39;控制器并尝试访问“页面”控制器上的页面,例如:
http://localhost:3000/posts/about
你会收到错误。那是因为routes.rb不包含你所在地的那条链接的路径,所以你必须告诉它如何到达那里。这正是我所做的:
以下是site_pages&#39;的路线(未触及)。 controller:[http:// localhost: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'
以下是帖子的新路线&#39;从该控制器请求的控制器:http:// localhost:3000 / posts / [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
NB。如果Devise链接未包含在Devise范围内,则Rails将返回错误。
我希望这会有所帮助。