作者Esh ()
看板Ruby
标题Re: [问题] 送出REST的CRUD 但是结果有问题
时间Wed May 27 16:08:33 2009
版大提到了Controller
不知道这样对不对,不是script/generate scaffold doctor ....
之後就有样板,没有提供rest功能?
小弟自己有小改一下
装了json的rubygem 之後有成功输出json格式的档案
class DoctorsController < ApplicationController
# GET /doctors
# GET /doctors.xml
def index
@doctors = Doctor.all
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @doctors }
format.json { render :json =>@doctors }
end
end
# GET /doctors/1
# GET /doctors/1.xml
def show
@doctor = Doctor.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @doctor }
format.json { render :json=> @doctor }
end
end
# GET /doctors/new
# GET /doctors/new.xml
def new
@doctor = Doctor.new
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @doctor }
format.json { render :json=> @doctor }
end
end
# GET /doctors/1/edit
def edit
@doctor = Doctor.find(params[:id])
end
# POST /doctors
# POST /doctors.xml
def create
@doctor = Doctor.new(params[:doctor])
respond_to do |format|
if @doctor.save
flash[:notice] = 'Doctor was successfully created.'
format.html { redirect_to(@doctor) }
format.xml { render :xml => @doctor, :status => :created, :location => @doctor }
format.json { render :json=> @doctor, :status => :created, :location => @doctor }
else
format.html { render :action => "new" }
format.xml { render :xml => @doctor.errors, :status => :unprocessable_entity }
format.json { render :json => @doctor.errors, :status => :unprocessable_entity }
end
end
end
# PUT /doctors/1
# PUT /doctors/1.xml
def update
@doctor = Doctor.find(params[:id])
respond_to do |format|
if @doctor.update_attributes(params[:doctor])
flash[:notice] = 'Doctor was successfully updated.'
format.html { redirect_to(@doctor) }
format.xml { head :ok }
format.json { head :ok }
else
format.html { render :action => "edit" }
format.xml { render :xml => @doctor.errors, :status => :unprocessable_entity }
format.json { render :json => @doctor.errors, :status => :unprocessable_entity}
end
end
end
# DELETE /doctors/1
# DELETE /doctors/1.xml
def destroy
@doctor = Doctor.find(params[:id])
@doctor.destroy
respond_to do |format|
format.html { redirect_to(doctors_url) }
format.xml { head :ok }
format.json { head :ok }
end
end
end
※ 引述《Esh ()》之铭言:
: 首先感谢大家之前对小弟之前在REST疑问的排除
: 现在遇到了一个状况
: 就是对规定的URI送出PUT, GET, POST, DELETE
: 只有GET跟DELETE的结果正确...
: (用了几个REST GUI Client都这样)
: 例如有一个doctors的controller
: 里面有Uid, Firstname, Lastname, City, 与License五个Fields
: 小弟我有修改migrate的内容,把timestamp去掉
: 现在除了上面5个栏位,只有多了会自动产生的ID
: 先用Scaffold产生的new样板,网页输入一笔资料後
: 对doctors/1.xml 送出Get Method得到了
: <?xml version="1.0" encoding="UTF-8"?>
: <doctor>
: <city>CA</city>
: <firstname>Peter</firstname>
: <id type="integer">1</id>
: <lastname>Norton</lastname>
: <license type="integer">2147483647</license>
: <uid>A128080042</uid>
: </doctor>
: 接着我想要修改资料,例如把uid改成 A128080142
: 於是再对doctors/1.xml 送出PUT
: 以下是封包内容
: <?xml version="1.0" encoding="UTF-8"?>
: <doctor>
: <city>CA</city>
: <firstname>Peter</firstname>
: <id type="integer">1</id>
: <lastname>Norton</lastname>
: <license type="integer">2147483647</license>
: <uid>A128080142</uid>
: </doctor>
: 送出之後,得到200 OK的回应
: 但是再用GET去看这笔资料
: 得到的还是变动前的UID
: 另外,要新增一笔资料
: 对doctors.xml送出POST
: 一样编辑上述的xml内容
: 一样得到200 ok的回应,也真的多了一笔资料在Database
: 可是仅有自动生成的ID栏位多了自动加1的数值
: 该record的其他栏位city, firstname. lastname.....
: 都是null的
: 不知道为什麽会发生这样的状况?
: 该如何解决? 我送出的方式有误嘛?
: 或者是REST Client的问题 (我用python的RESTClient http://restclient.org/ )
: 有请高手解惑了!
: 谢谢
--
http://blog.leezhenyu.com
Technology, Study, Food, Travel
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.137.254.39
1F:→ godfat:ok, 这样很明显就是 python 丢来的 param 格式跟 rails不同 05/27 17:12
2F:→ godfat:你看看 log 看他实际上是丢什麽过来,然後看能不能改 05/27 17:12