问题描述
接照《Rolling with Ruby on Rails》示例来做的。执行ruby scriptgenerate scaffold recipe title:string instructions:string description:string date:date后,在生成的recipes_controller.rb文件中增加一list方法,URL中http://localhost:3000/recipes/list访问时,提示如下信息ActiveRecord::RecordNotFound in RecipesController#show Couldn't find Recipe with ID=listRAILS_ROOT: E:/ruby/sites/myapp它可能无法与“http://localhost:3000/recipes/7”即显示某一条记录详细情况的URL区分开。难道用ruby scriptgenerate scaffold 生成的controller中就不能再增加其它方法了吗?如果能的话,怎么才能增加上呢?这个问题郁闷了我好久,一直没找到合适的资料说明。盼高手出手相助,或者推荐相关的资料(我用的是ruby 1.8.6,rails2.1)
解决方案
我再来补充一下,以上的方法是可行的,但是在rails2.1中,有更好的方法来实现这个。map.resources :managers, :member => { }, :collection => { :login => :get }它的意思是指明除了controller中自动生成的7个方法外,要加上自己的方法,就用这个来实现,member和collection相信你看名字就知道是什么意思了吧。
解决方案二:
在Rails2.1中,新增一个action有些麻烦,你得自己配置一下config/routes.rb路由文件,举例如下:我用generate scaffold生成了Manager,现在我想自己在managers_controller.rb中新增一个action,叫login,那么请在routes.rb中找到map.resources :managers在它的前面加上map.connect("managers/login", :controller => 'managers', :action => "login")然后,重启web服务器,再访问http://localhost:3000/managers/login应该没有问题了。