rails控制器在传入id时创建而不是更新

时间:2012-02-08 14:27:26

标签: ruby-on-rails-3

我正在尝试使用qqfile将文件添加到模型中(尽管这里真的不相关)。

我查看传递给服务器进行更新的参数,我有

{ id: 63, photo: 'foto_file.jpg'}

我的理解是,如果使用id参数传递对象,rails会将其理解为已存在的对象,并更新该模型。如果没有id参数,Rails将使用create。

这不正确吗?在这种情况下,我如何告诉rails更新而不是创建? 我假设这里不需要更多的代码,因为我的控制器不会真正帮助解决方案,因为我认为这个决定是在它真正击中控制器之前由rails做出的。但如果需要,我很乐意发布控制器代码。

---------------我的javascript用于更新或创建模型---------------------

render: function(){
        var start_form=HandlebarsTemplates['user/userForm'](user.attributes);
        $(this.el).html(start_form);

        var uploader = new qq.FileUploader({
            element: document.getElementById('file-upload'),
            action: '/users',
            onSubmit: function(id, fileName){

                if(MyApp.user.id){
                 uploader.setParams({
                    id: MyApp.user.id
                    });
                }
            },
            debug: true
        });


    },

2 个答案:

答案 0 :(得分:3)

update方法仅在您发送PUT请求而非POST请求时使用。确保您使用的是PUT方法。 (如果您显示表单的代码,我可以给出更具体的答案)。

更新 - 使用您的代码,尝试将其作为参数添加到qq.FileUploader电话中:

params: {
  _method: "put"
}

Rails会查找_method参数来处理PUT / DELETE请求。

答案 1 :(得分:0)

我无法让Dylan的javascript方法工作,所以在我的控制器中,如果响应有id,我会重定向到我的更新。

def create
   if params[:id]
      return self.update
   end
   #then all my regular create stuff here
end

def update
   #all the usual update stuff
end