在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对象是否仍会被放入数据库?
答案 0 :(得分:4)
如果
@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
。
如果帖子未保存,
Post
创建的Post.new
对象是否仍会被放入数据库?
当然不是。这就是保存的作用:将对象保存在数据库中。如果您没有在save
对象上调用Post
,或者save
返回false
(由于验证失败而会发生),该对象 not 存储在数据库中。 Post.new
只是在内存中创建一个新的Post
对象 - 它根本不会触及数据库。