2010-10-31 174 views
2

我跟着O'Reilly Rails的书,但它是为Rails 2创建的,所以我认为这就是错误所在。Rails 3路由错误 - “没有路由匹配”

在应用程序/视图/项/ sign_in.html.erb:

<html> 
<head><title>Hello <%=h @name %> </title> </head> 
<body> 
<h1> Hello <%=h @name %></h1> 

<%= form_tag :action => 'sign_in' do %> 
    <p>Enter your name: 
    <%= text_field_tag 'visitor_name', @name %> </p> 
    <%= submit_tag 'Sign in' %> 
    <% end %> 
</body> 
</html> 

而在应用/控制器/ entries_controller.rb:

class EntriesController < ApplicationController 
    def sign_in 
     @name = params[:visitor_name] 
    end 

    end 

当我点击 '登录' 按钮,它带我到一个页面,上面写着:

路由错误

没有路由匹配“/项/ sign_in”

我会后我的routes.rb文件,但似乎这一切都注释掉,除了这一行:

GET“条目/ sign_in”

该文件似乎比他们是一个不同在本书中引用,所以这就是为什么我认为这是问题。

感谢您的帮助!

回答

2

Rails 3路由器已经改变了很多。看到这个博客帖子: http://www.engineyard.com/blog/2010/the-lowdown-on-routes-in-rails-3/

你想要做的可能是什么:

resources :entries do 
    collection do 
    post :sign_in 
    end 
end 

这增加了对项目的整个集合(/项/ sign_in)的动作(相对于#member,这将通过/ entries /:id/sign_in访问)。 虽然我不确定你为什么要在条目资源中登录某人。您可以为此创建一个单独的控制器。

5

如果您正在学习Rails,您会发现使用与您正在学习的相同版本的Rails更容易。无论是学习Rails 2还是升级到3,或者获得一本新书。

Rails 2和3之间有很多不同之处,所以你会花费你所有的时间和这样的事情混淆。

相关问题