打印

[Rails 常用插件简介]CRUD Generator 2

本帖已经被作者加入个人空间

[Rails 常用插件简介]CRUD Generator 2

注: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/**,执行

rake db:migrate


在routes.rb新增

map.resources :topics


好了,启动你的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 编辑 ]
附件: 您所在的用户组无法下载或查看附件

TOP

Great! 除了scaffold 外的另一选择。
谢谢大家加入Ruby中文社区!
[寻找您身边的Rubyist.]

TOP

用这个插件比用scaffold有什么好处吗,或者优势

I.forget('you'){|something| something.remember.deepen}

TOP

不能理解所谓的ROR的插件到底是干什么的呢?前两天为了个项目调试,安装了很多的插件 如rmail
这里也看到了很多这个东西?
GEM可以直接远程下载这些东西吗?

TOP

刚学:victory:

TOP

2008-12-02 21:35 Crawled by CCBot/1.0 (+http://www.commoncrawl.org/bot.html) @38.103.63.61