1

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

在该函数中,我有以下代码

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

我看到的是进度没有更新。尽管以下

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

有什么想法吗?

4

5 回答 5

1

我对 Rails 还是很陌生,但是每次我保存一些东西时,我都必须使用 bang 方法。你有没有尝试过progression.save!

于 2013-08-13T13:34:00.503 回答
1

好的,我遇到了同样的问题,我设法解决了。问题出在关联名称上。我有一个名为 User 的模型和一个名为 Update 的子模型,其中包含每个用户的新更新数量。所以,在 user.rb 我有这一行:

has_one :update

在我删除这一行之后,一切又开始工作了。看起来这是一个 rails 保留名称,在创建模型时不应使用它。也许你在这里遇到了同样的问题。可惜Rails 没有指出这个问题。

于 2013-10-13T20:21:16.003 回答
0

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

于 2013-08-13T15:45:07.400 回答
0

尝试

progression = Progression.find_by_id(newprogression)
if progression.participation_id.nil?
  progression.update_attributes(
     :participation_id => participation.id
  )
else
于 2013-02-23T17:16:28.457 回答
0

可能是缓存问题。从AR Relations - Sec 3.1 的 rails 指南中,您可能希望通过传递 true 来重新加载缓存。如果您通过参与进行检查,在通过进度建立链接之后,您可能会遇到这种情况。

假设 Progression belongs_to 参与,

你能试试:progression.participation = 参与然后progression.save

另外,请尝试:partition.progressions << progress 和participation.save ?

于 2013-02-23T18:11:05.337 回答