rails model.save返回true但不保存到db

时间:2013-02-23 16:56:19

标签: ruby-on-rails rails-activerecord

我在模型中有一个函数,它执行一些操作after_save

在该功能中,我有以下代码

progression = Progression.find_by_id(newprogression)
if progression.participation_id.nil?
  progression.participation_id = participation.id
  progression.save
else

我所看到的是,进展没有得到更新。即使以下

  • 如果我在保存更新前检查progression.participation_id
  • 如果在调试器中我手动运行progression.save我会返回true。

有什么想法吗?

5 个答案:

答案 0 :(得分:1)

我仍然是Rails的新手,但每次我保存的东西,我都必须使用爆炸方法。你试过progression.save!

吗?

答案 1 :(得分:1)

好的,我有同样的问题,我设法处理它。 问题在于关联名称。我有一个名为User的模型和一个名为Update的子模型,它具有每个用户的新更新数。所以,在user.rb中我有这一行:

has_one :update

删除此行后,一切都重新开始了。看起来这是一个rails保留名称,在创建模型时不应该使用它。也许你在这里遇到了同样的问题。遗憾的是Rails并没有表明这个问题。

答案 2 :(得分:0)

尝试

progression = Progression.find_by_id(newprogression)
if progression.participation_id.nil?
  progression.update_attributes(
     :participation_id => participation.id
  )
else

答案 3 :(得分:0)

这可能是一个缓存问题。从rails guide on AR Relations - Sec 3.1开始,您可能希望通过传递true来重新加载缓存。如果您在通过升级建立链接后通过参与进行检查,则可能会遇到此问题。

假设进步属于参与,

你可以试试:progression.participation =参与然后继续进行。

另外,尝试:participation.progressions<<进展和参与.save?

答案 4 :(得分:0)

saveafter_save在同一个交易中运行。也许这是一个问题。尝试使用after_commit回调