ruby-on-rails – 使用不同的http请求时“保存”和“更新”之间的区别

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 使用不同的http请求时“保存”和“更新”之间的区别前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
当我在下面的代码中尝试用@ post.save替换@ post.update时,它仍然有效并且返回true,但是值没有更新.
def create
    @post = Post.new(post_params)
    if @post.save
      redirect_to posts_path,notice: 'Post was successfully created.'
    else
      render action: 'new'
    end
  end

  def update
    respond_to do |format|
      if @post.update(post_params)
        format.html { redirect_to @post,notice: 'Post was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: 'new' }
        format.json { render json: @post.errors,status: :unprocessable_entity }
      end
    end
  end

以下是我的佣金路线:

$rake routes
    posts GET    /posts(.:format)          posts#index
          POST   /posts(.:format)          posts#create
 new_post GET    /posts/new(.:format)      posts#new
edit_post GET    /posts/:id/edit(.:format) posts#edit
     post GET    /posts/:id(.:format)      posts#show
          PATCH  /posts/:id(.:format)      posts#update
          PUT    /posts/:id(.:format)      posts#update
          DELETE /posts/:id(.:format)      posts#destroy
     root        /                         welcome#index

为什么不更新或覆盖我的记录?

对相同方法使用不同的http请求会对它们产生什么影响吗?当使用正确的语法传递时,我们可以使用PUT,GET,PATCH和DELETE进行保存吗?

问题是关于rails 4 guide,第一个guide.

解决方法

因为save不会接受属性作为参数; save只能接受诸如validate:false之类的参数来跳过验证.

如果要使用save,则需要在保存之前分配或修改单个属性.但是如果你想要大规模分配,那么更新将是你的选择.

@post.f_name = 'foo'
@post.l_name = 'bar'    
@post.update # This will not work
@post.save # This will work

@post.save({:f_name=>"peter",:l_name=>"parker"}) # This will not work
@post.update({:f_name=>"peter",:l_name=>"parker"}) # This will work

猜你在找的Ruby相关文章