保存新创建的对象

时间:2012-10-13 00:49:11

标签: ruby-on-rails ruby-on-rails-3.2

在Rails控制器代码中

def create
  @post = Post.new(params[:post])
  @post.random_hash = generate_random_hash(params[:post][:title])
  if @post.save
    format.html { redirect_to @post }
  else
    format.html { render action: "new" }
  end
end

定义的前两行是否应放在if @post.save内?如果帖子未保存,Post.new创建的Post对象是否仍会被放入数据库?

1 个答案:

答案 0 :(得分:4)

  1.   

    如果@post.save或不是,那么定义的前两行是否应该放在里面?

    肯定不是。如果您按照建议将其更改为以下内容:

    def create
      if @post.save
        @post = Post.new(params[:post])
        @post.random_hash = generate_random_hash(params[:post][:title])
        format.html { redirect_to @post }
      else
        format.html { render action: "new" }
      end
    end
    

    然后根本不起作用。没有@post来致电save

  2.   

    如果帖子未保存,Post创建的Post.new对象是否仍会被放入数据库?

    当然不是。这就是保存的作用:将对象保存在数据库中。如果您没有在save对象上调用Post,或者save返回false(由于验证失败而会发生),该对象 not 存储在数据库中。 Post.new只是在内存中创建一个新的Post对象 - 它根本不会触及数据库。