Rails 3:API PUT请求失败,记录未更新
我有一个API用于更新艺术家的应用程序和一个尝试与API交互以更新艺术家的客户端。 问题是,每当我尝试执行PUT请求时,记录都不会更新,并且请求会因Completed 204 No Content in 14ms (ActiveRecord: 0.0ms)
的Completed 204 No Content in 14ms (ActiveRecord: 0.0ms)
错误而Completed 204 No Content in 14ms (ActiveRecord: 0.0ms)
。
这是API控制器:
class Api::V1::ArtistsController < Api::V1::BaseController respond_to :json def show respond_with Artist.find_by_id(params[:id]) end def update artist = Artist.find_by_id(params[:id]) respond_with artist.update_attributes(params[:artist]) end end
从客户端模型进行API调用的方法:
def update_artist_attributes self.class.put("/api/artists/#{self.artist_id}.json", { body: { artist: { bio: self.artist_attributes_copy[:bio], phone_number: self.artist_attributes_copy[:phone_number], country: self.artist_attributes_copy[:country], city: self.artist_attributes_copy[:city] } } }) end
和服务器日志(API端):
Started PUT "/api/artists/1.json" for 127.0.0.1 at 2013-02-02 19:00:00 +0100 Processing by Api::V1::ArtistsController#update as JSON Parameters: {"artist"=>{"bio"=>"NERVO sisters are not lesbians and they're hot! And they're single too!", "phone_number"=>"218391", "country"=>"Afghanistan", "city"=>"dnajksakd"}, "id"=>"1"} Artist Load (0.4ms) SELECT "artists".* FROM "artists" WHERE "artists"."id" = 1 LIMIT 1 (0.2ms) BEGIN Artist Exists (0.4ms) SELECT 1 AS one FROM "artists" WHERE "artists"."access_token" = 'EqHG8SGh9ldl3W-U5PBECw' LIMIT 1 Artist Exists (0.6ms) SELECT 1 AS one FROM "artists" WHERE (LOWER("artists"."access_token") = LOWER('EqHG8SGh9ldl3W-U5PBECw') AND "artists"."id" != 1) LIMIT 1 Artist Exists (0.5ms) SELECT 1 AS one FROM "artists" WHERE ("artists"."email" IS NULL AND "artists"."id" != 1) LIMIT 1 (0.3ms) ROLLBACK Completed 204 No Content in 14ms (ActiveRecord: 0.0ms)
我究竟做错了什么?
204问题正在发生,因为update_attributes
不返回模型实例。 您希望更新方法为:
artist = Artist.find_by_id(params[:id]) artist.update_attributes(params[:artist]) respond_with artist
update_attributes
返回true
或false
具体取决于操作是否成功。
您将此结果传递给respond_with
,因此我认为这就是您获得204代码(“无内容”)的原因 – 无论update_attributes
的结果如何,请求都被视为成功,但不返回任何内容。
提交的两个答案是有效的,但问题的核心是我有validation错误,因此模型对象没有得到更新……