MembersController#show中的ActiveRecord :: RecordNotFound

1 ruby ruby-on-rails

我很抱歉我的英语不好.我刚刚在几小时前安装了ruby和rails(你不会相信我花了3天时间在这台ubuntu 10.04机器上安装ruby,rvm,rails等)并且我正在尝试实现基本的Member scaffold.我的rails版本是3.0.0,我的ruby是1.9.2.

当我#rails generate scaffold Member email:string password:string创建各种文件.我也在#rake db:migratemysql中实现了数据库.所以在成员控制器中,我看到我必须通过127.0.0.1:3000/members/才能进入基本的脚手架设置.

我改变了

def new
  @member = Member.new

  respond_to do |format|
    format.html # new.html.erb
    format.xml  { render :xml => @member }
  end
end
Run Code Online (Sandbox Code Playgroud)

以上成员控制器中的语句进入

def register
  @member = Member.new

  respond_to do |format|
    format.html # new.html.erb
    format.xml  { render :xml => @member }
  end
end
Run Code Online (Sandbox Code Playgroud)

你看,我刚把新的改成了寄存器,现在,当我试着进入127.0.0.1:3000/members/register时ActiveRecord::RecordNotFound出现错误.我该如何解决这个问题?我只想让127.0.0.1:3000/members/register成为用户可以注册的页面.

顺便说一句,这个RoR似乎非常复杂,api文件似乎太宽泛,无法被初学者理解.我上周订购了一本RoR书,所以我会看看它是怎么回事......

maz*_*maz 5

通过使用脚手架生成器,成员被映射为资源.看看吧config/routes.rb

resources :members
Run Code Online (Sandbox Code Playgroud)

当实体映射为资源时,它们会获得一组默认路由.您可以通过执行查看所有映射的路由 rake routes

members GET     /members(.:format)          {:action=>"index", :controller=>" members"}
members POST    /members(.:format)          {:action=>"create", :controller=> "members"}
new_member GET  /members/new(.:format)      {:action=>"new", :controller=>"members"}
edit_member GET /members/:id/edit(.:format) {:action=>"edit", :controller=>"members"}
member GET      /members/:id(.:format)      {:action=>"show", :controller=>"members"}
member PUT      /members/:id(.:format)      {:action=>"update", :controller=>"members"}
member DELETE   /members/:id(.:format)      {:action=>"destroy", :controller=>"members"}
Run Code Online (Sandbox Code Playgroud)

new操作重命名为该操作时,register不再是该映射的有效路由.

你可以做的是把动作留在你的行动中new,只需添加以下路线即可routes.rb

match 'members/register' => 'members#new'
Run Code Online (Sandbox Code Playgroud)

这样你就不会破坏脚手架中的其他东西.如果你真的想重命名要注册的动作,我建议不要使用脚手架.