通过内联编辑调用Rails更新方法

时间:2009-10-05 16:55:55

标签: ruby-on-rails rest

我在我的第一个Rails应用程序中整理了一个快速的内联编辑功能,正当我开始工作时,我发现我可能违反了RESTful原则。编辑更新了图像名称。为此,它会通过PUTImage#update提交并将新修改后的名称作为image[name]传递。

数据库正确更新,但我需要返回该值,以便我的标记可以反映名称更改。为此,我正在调用/images/:id.json,但这让我想知道PUT请求是否可以“有效”(以RESTful方式)返回这样的值。

思想?

更新:无论价值多少,我都在使用jQuery和jEditable插件进行内联编辑。这是我的jEditable代码:

$(document).ready( function() {
  $('h2').editable(
    '/images/' + $('#image-id').val() + '.json',
    {
      method: 'PUT',
      name:   'image[name]',
      submitdata: { authenticity_token: $('#auth-token').val() },
      submit: 'Save',
      cancel: 'Cancel'
    }
  );
})

现在我的Image#update方法存在:

def update
  @image = Image.find( params[:id] )
  if @image.update_attributes( params[:image] )
    flash[:notice] = "Successfully updated image."

    respond_to do |format|
      format.html { redirect_to @image }
      format.json { render :json => @image.to_json }
    end
  else
    render :action => 'edit'
  end
end

1 个答案:

答案 0 :(得分:0)

如果您只关心使用JSON的更新方法提供响应正文而不只是200 OK(Rails的head :ok),那么我认为您不必担心。默认响应为200 OK,因此您正在执行的操作与Rails默认执行的操作(在其支架中)之间的唯一区别在于您还包括响应正文。据我所知,正确的REST礼仪只要求你返回一个200 OK而不关心响应体,这与你正在做的事情是一致的。

除此之外,您的所有代码都非常出色。