【发布时间】:2012-05-07 11:55:12
【问题描述】:
在我的创建操作中,方法 new 的行为类似于创建。
def create
@page = Page.new(params[:page].merge(:user_id => current_user.id ))
if @page.save
flash[:notice] = t("success")
redirect_to pages_path
else
render :new
end
end
当我使用带有参数的新对象时,ActiveRecord 在数据库中创建新对象。 Page.new 在我的控制器中的新操作中运行良好。可能是什么原因?我的模型中没有重写方法 new 和回调(before_save、before_create 等)。任何帮助将不胜感激。
更新 - 来自调试器的代码
.../app/controllers/pages_controller.rb:48
@page = Page.new(params[:page].merge(:user_id => current_user.id ))
(rdb:25) @page
nil
(rdb:25) n
.../app/controllers/pages_controller.rb:49
if @page.save
(rdb:25) @page
#<Page id: 80 ... >
(rdb:25) Page.last
#<Page id: 80 ... >
(rdb:25) @page.save
false
【问题讨论】:
-
dude page.save 触发了那个东西:P
-
你怎么知道它在调用
Page.new..时会在数据库中创建新记录,然后将其保存到数据库@page.save。@page.save将在数据库中创建新记录。这是正在发生的事情吗?你想让这段代码做什么? -
我的模型中有验证,所以如果它们失败,@page.save 将返回 false 并且应用程序将呈现操作“新”。我确定,那 Page.new(params[:page].merge(:user_id => current_user.id )) 正在数据库中保存记录 - 用调试器找到它
-
@zachar 那不可能,伙计。新的不能“保存”对象。
-
'new' 理论上可以保存模型,如果有某种回调来保存对象。模型中有回调吗?
标签: ruby-on-rails ruby ruby-on-rails-3 activerecord