Ruby On Rails 学习笔记(3)

奋斗了一个晚上,把官网的Getting Started做完了。几乎功能和Symfony是一个模子。从时间前后来看,应该是Symfony模仿了RoR的。

需求很简单,可以发一条博客信息(Post 列表,详细,增删改),别人可以回复(Comment,和博客是一对多关系),博客可以加入Tag信息。(Tag,增删改)。

从增量开发的观点。分三步走

1)博客基本功能

2)回复功能

3)标签功能

到此,一个基本Blog已经基本成型。

教程也非常简单。
1)使用scaffold命令建立一套(包括数据库建表脚本,CRUD画面,Model,Contorl等等)

$ rails generate scaffold Post name:string title:string content:text

2)将建表脚本同步到数据库

$ rake db:migrate

3)非常神奇,现在一个Blog所有的功能都有了。

但是和symfony的感受一样。最快的不一定是最好的。果然官方文档,特别提醒说,众多的最佳实践,都要求不要使用scaffold命令。因为这些最快出来的东西有可能不是自己要的。而为了修改和自定义,常常要比自己直接修改文件,要发挥很多的时间。结果,本来是要加快速度的,却把大量时间花在了配置scaffold上。所以,除非是学习用,或者对scaffold的配置已经了如指掌了。正式开发还是少用为妙。

4)所以还是用一个中间级别的命令。

$ rails generate model Comment commenter:string body:text post:references
$ rails generate controller Comments

自己一步一步做成model controller以及View。这样既能减少大量时间,也能更容易掌控。

5)按照教程,还能了解基本的Controller的功能。例如

def show
  @post = Post.find(params[:id])

  respond_to do |format|
    format.html  # show.html.erb
    format.json  { render :json => @post }
  end
end

def update
  @post = Post.find(params[:id])

  respond_to do |format|
    if @post.update_attributes(params[:post])
      format.html  { redirect_to(@post,
                    :notice => 'Post was successfully updated.') }
      format.json  { render :json => {}, :status =>:ok }
    else
      format.html  { render :action => "edit" }
      format.json  { render :json => @post.errors,
                    :status => :unprocessable_entity }
    end
  end
end