我很抱歉我的英语不好.我刚刚在几小时前安装了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书,所以我会看看它是怎么回事......
通过使用脚手架生成器,成员被映射为资源.看看吧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)
这样你就不会破坏脚手架中的其他东西.如果你真的想重命名要注册的动作,我建议不要使用脚手架.