本站首页    管理页面    写新日志    退出


«August 2025»
12
3456789
10111213141516
17181920212223
24252627282930
31


公告
 本博客在此声明所有文章均为转摘,只做资料收集使用。

我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:
日志总数:1304
评论数量:2242
留言数量:5
访问次数:7588642
建立时间:2006年5月29日




[Ruby on Rails]REST 与 Rails
软件技术

lhwork 发表于 2007/2/8 10:37:51

前一阵子我对 simply_restul 进行为尝试,Rails 核心发布的公告升级了 edge 。它不再是个插件了,它没有了原来的名字并被进行了一些修改,但总的来说还是一样的。我正打算完成一个 REST 控制器的快速教程。它并不是很难---只是我被吓到了。 rails simple 这个命令会创建一个名为 “simple”的 Rails 工程。没有 –d 标志,则它默认会使用 MySQL。 cd rails mysqladmin -u root create simple_development mysqladmin -u root create simple_test 上面命令创建数据库,如果这是个更长的教程的话,我会对它测试。 rake rails:freeze:edge 这个命令会让你的工程使用 Rails “Edge” 的最新版本。如果你想跟着做下去的话,你必须得这样做。将来这个步骤将不再需要。 script/generate model Person 我们的例子工程 --- Person 。 db/migrate/001_create_people.rb: class CreatePeople < ActiveRecord::Migration def self.up create_table :people do |t| t.column "name", :string t.column "bio", :text end end def self.down drop_table :people end end 编辑完上述文件后,执行: rake db:migrate 我们现使用迁移来创建表。如果一切正常的话,现在你的数据库内已有了一个表 --- “pople”,它有两个列:name 和 bio 。 在你的 config/routes.rb 文件内添加下面行: map.resources :people (这是对 simply_restful 的一处改动,现在它是复数)这儿就是魔术发生的地方。这一行代码将给予你一些东西。现在 REST 与你的控制器之间的所有映射都将开始工作。 script/generate controller people index new create show edit update destroy 这将创建带有所有 REST/Rails 动作的控制器。 app/controllers/people_controller.rb: class PeopleController < ApplicationController # 许多动作都需要查找在 params[:id] 内发送的 person , # 因此就不要再重复操作了。 before_filter :find_person, :except => [:index, :new, :create] # 映射到 /people - person_url 的具名路由器 # HTTP 动词:GET def index @people = Person.find(:all) respond_to do |format| format.html format.xml { render :xml => @people.to_xml } end end # 映射到 /people/new - new_person_url 的具名路由器 def new @person = Person.new end # 在对 /people POST 操作时调用。 def create @person = Person.new(params[:person]) @person.save! respond_to do |format| format.html do flash[:notice] = "Person was successfuly created" redirect_to person_url(@person) end format.js end end # 映射到 /people/:id - person_url(person_object) 的具名路由器 # HTTP verb: GET def show respond_to do |format| format.html format.xml { render :xml => @person.to_xml } end end # 映射到 /people/:id;edit - edit_person_url(person_object) 的具名路由 def edit end # gets called for PUT to /people/:id def update @person.attributes = params[:person] @person.save! respond_to do |format| format.html do flash[:notice] = "Person updated" redirect_to person_url(@person) end format.js end end # 映射到 /person/:id;destroy # HTTP 动词: DELETE def destroy @person.destroy respond_to do |format| format.html do flash[:notice] = "Person destroyed" redirect_to people_url end format.xml { render :nothing => true } end end protected def find_person @person = Person.find(params[:id]) end end “这儿有很多代码。这是 person 控制器与你希望在一个 person 上要完成的所有动作。它们非常完美地映射到 HTTP 动词。你应该输入代码(如果生成器为你生成了很多,则你只需要在方法内进行填充)” 你会注意到奇怪的 “respond_to do |format|” 。这是一个很普通的特征:你可以按客户端相要的格式发送它们。因此如果有人请求 /person/1.xml --- 则说明它们明确地想要 xml 输出,就用这个处理。 这就是全部的好东西。我们还可能给所有代码写了一个非常完美的测试,但现在我们还需要视图。 app/views/people/index.rhtml < % @people.each do |p| %> <div id="person_<%= p.id %>"> <p>Name:< %= link_to h(p.name), person_url(p) %></p> <p>Bio:< %= h p.bio %></p> </div> < % end %> < %= link_to "New Person", new_person_url %> app/views/people/new.rhtml <h2>New person</h2> < % form_for :person, @person, :url => person_url, :method => :post do |f| %> < %= render :partial => "form", :object => f %> < % end %> app/views/people/show.rhtml <h3>< %= h @person.name %></h3> <p> < %= h @person.bio %> </p> < %= link_to "Edit", edit_person_url(@person) %> app/views/people/edit.rhtml <h2>Edit person: <%= h @person.name %></h2> <% form_for :person, person, :url => person_url(person), :html => { :method => &apos;put&apos; } do |f| %> app/views/people/_form.rhtml <p> <label for=&quot;person_name&quot;>Name:</label> <%= form.text_field :name %> </p> <p> <label for=&quot;person_bio&quot;>Bio:</label> <%= form.text_area :bio %> </p> <p> <%= submit_tag %> </p> 我们旅游结束了。 http://metaatem.net/2006/07/31/rest-and-rails-no-reason-to-be-scared


阅读全文(2369) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.063 second(s), page refreshed 144754150 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号