注:Rails常用插件系列仅仅发于我的javaeye博客(http://mmm.javaeye.com/)和http://www.ruby-lang.org.cn,任何转载请注明出处,多谢!
还是晚上的效率高:) 再来一篇
CRUD Generator 2 是什么?
CRUD Generator 2 正如标题,是一个生成代码的脚手架,增删改查,和我们
php?name=rails" onclick="tagshow(event)" class="t_tag">rails自带的resource scaffold一样,都生成基于rest的代码
一:安装
ruby script/plugin install http://crudgenerator2.googlecode.com/svn/trunk/crud_generator2
二:生成
ruby script/generate topic
...
create app/controllers/topics_controller.rb
create test/functional/topics_controller_test.rb
....
create app/views/topics/index.rhtml
create app/views/topics/new.rhtml
.....我们来看一下生成的controller
class TopicsController < ApplicationController
# Do a find on the specific record before
# show, edit, update, destroy only
before_filter :find_topic,
:only => [:show, :edit, :update, :destroy]
# HTTP : GET /topics
# SQL : SELECT
# NAMED ROUTE : topic_url
def index
# We'll respond to these actions depending on the Accepts
# header presented or by the explicit extension
# (.html, .js, .xml, .rss, .atom, etc)
#
# HTML : paginated html : Accept text/html or index.html
# JavaScript : render a JavaScript template in index.rjs
# XML : index.xml : return all of the objects found by default
respond_to do |format|
format.html do
@topics = Topic.paginate :page=>params[:page]||1
end
format.js
format.xml do
@topics = Topic.find_all
render :xml => @topics.to_xml
end
#type.rss { render :action => "rss.rxml" }
#type.atom { render :action => "atom.rxml" }
end
end
# HTTP : GET /topics/new
# SQL : No Op
# NAMED ROUTE : new_topic_url
def new
@topic = Topic.new
end
# HTTP : POST /topics
# SQL : INSERT
def create
@topic = Topic.new(params[:topic])
@topic.save!
respond_to do |format|
format.html do
flash[:notice] = "Successfuly created"
redirect_to :action => "index"
end
format.js # Renders create.rjs
format.xml do
headers["Location"] = topic_url(@topic)
render(:nothing => true, :status => "201 Created")
end
end
end
# HTTP : GET /topics/1
# SQL : SELECT
# NAMED ROUTE : topic_url(topic_object)
def show
respond_to do |format|
format.html do
render
end
format.xml { render :xml => @topic.to_xml }
end
end
# HTTP : GET /topics/1;edit
# SQL : SELECT
# NAMED ROUTE : edit_topic_url(topic_object)
def edit
end
# HTTP : PUT /topics/1
# SQL : UPDATE
def update
@topic.attributes = params[:topic]
@topic.save!
respond_to do |format|
format.html do
flash[:notice] = 'Successfully updated.'
redirect_to topic_url(@topic)
end
format.js
end
end
# HTTP : DELETE /topics/1
# SQL : DELETE
def destroy
@topic.destroy
respond_to do |format|
format.html do
flash[:notice] = 'Successfully destroyed.'
redirect_to :action => "index"
end
format.xml { render :nothing => true }
end
end
protected
def find_topic
begin
@topic = Topic.find(params[:id])
rescue
flash.now[:warning] = 'Error, Invalid ID'
logger.error("RescueAttemptToFindInvalidID#{params[:id]}")
end
end
end修改db/migrate/**,执行
在routes.rb新增
好了,启动你的server,在
浏览器中输入http://host:port/topics 就可以查看了
注:
crud2基于Edge Rails不能正常运行,附件是修改过后的代码
。
运行前请先安装will_paginate:http://www.ruby-lang.org.cn/forums/viewthread.php?tid=985&extra=page%3D1
[
本帖最后由 martin 于 2007-8-26 23:46 编辑 ]