今天在看Agile.Web.Development.with.Rails.2nd.Edition
照着书写 Chapter 6 的代码
class AdminController < ApplicationController
scoffold Product;
end
运行报错。
undefined method `scoffold' for AdminController:Class
运行 gem list 查看当前版本
rails (2.0.2, 1.2.6)
查了网上的信息, 说是rails2.0把动态的scaffold去掉了。书写的内容比当前运行的2.0.2rails早。真郁闷。
怎么办。有一种办法就是把版本降低。还有说装插件,但是我试了一下,发现没有反应,依然提示undefined method ,不知道是否是操作有问题。使用netbeans插件安装。
具体参考http://xudayu.blog.51cto.com/187984/67326
第三个办法在
http://leonardoborges.com/writings/2007/12/21/rails-20-scaffold/ 找到的
script\generate scaffold Contact name:string email:string
原文如下:
But wait, before you knock your head against the wall, let me tell you something: I lied
Scaffolding is not really gone. It’s just changed a bit.
How can I tell? Well, as a good developer I thought: “I’ll just create a scaffold with the new version and see what’s different”
I fired up a terminal, created a news rails application and generated a new model:
$ script/generate model Contact name:string email:string - yes you can do this in rails 2.0, and these fields get into your model’s migration!
Now the I have a new model, it’s time for a controller to manage it:
$ script/generate controller Contacts
So your controller would look something like this huh?
class ContactsController < ApplicationController
scaffold :contact
end
Well, too bad! The method scaffold is gone from ActionController::Base! And I’m not lying this time!
Now that the dynamic scaffold is gone, we’re left with the static one.
Ok, let’s try it then:
$ script/generate scaffold contact
And it won’t work again! At the end of the output, you will get something like this:
Another migration is already named create_contacts: db/migrate/001_create_contacts.rb
It really means that if your model is meant to be used by a scaffold, you better generate it in the same line. It will fail, afaik, if the model previously existed. Destroy yout model and controller, and execute the following:
$ script/generate scaffold Contact name:string email:string
Done! Just run your migrations, startup your server and your new scaffold in rails 2.0 will be working gracefully!
It took me a while to discover this changes because I didn’t find it well documented. But maybe I was not looking in the right places.
生成
这里也有说明。http://www.ruby-lang.org.cn/forums/viewthread.php?tid=2786 第四楼
script/generate scaffold ModelName [field:type field:type]
去掉了1.2前使用的语法:
script/generate scaffold ModelName [ControllerName] [action, ...]
现在就不能像以前那样建了model和controller后再用scaffold了。