nis*_*han 1 activerecord associations reload ruby-on-rails-3
案例1:为模型创建新记录,并指定关联对象(Status对象而不是Status.id)
visit = Visit.create(:date => Date.today, :status => Status.first)
visit.status_id #=> 1
Run Code Online (Sandbox Code Playgroud)
创建记录后
我正在尝试更新属性'status_id'(Status.id而不是Status对象),但它会在保存对象后返回旧值,甚至调用reload.例:
visit.status_id = Status.last.id
visit.save
visit.reload
visit.status_id #=> 1
Run Code Online (Sandbox Code Playgroud)
当我在创建后调用reload方法时,它按预期工作
visit = Visit.create(:date => Date.today, :status => Status.first)
visit.status_id #=> 1
visit.reload
visit.status_id = 2
visit.save
visit.status_id #=> 2
Run Code Online (Sandbox Code Playgroud)
Case2:如果我分配'status_id'值而不是Status对象,那么就不需要重新加载对象了,它的工作正常
visit = Visit.create(:date => Date.today, :status_id => Status.first.id)
visit.status_id #=> 1
visit.status_id = 2
visit.save
visit.status_id #=> 2
Run Code Online (Sandbox Code Playgroud)
使用上面两种情况,我应该何时使用该reload
方法?它应该在之前还是之后save
?
我认为你对如何save
和reload
工作的理解基本上是正确的.你的结果肯定似乎不一致.我根据你的结果感觉你save
的失败.
save
将尝试将本地版本存储到数据库中.如果模型在加载后已更改,则不会刷新数据库中的任何值.如果save
失败,则本地值仍然是您设置的值,但数据库将具有旧值.
reload
覆盖您所做的任何本地更改,并将它们设置为数据库值.
假设您所关注的模型在数据库上没有争用,那么让我们来看看您的示例.
例1
如果save
作品,则reload
不会做任何事情,价值visit.status_id
会Status.last.id
.但是,如果save
失败,则其值visit.status_id
将是最初在数据库中的值.
示例2
如果create
不起作用,reload
则会出现RecordNotFound
错误,因为您无法reload
保留未被保留的内容.之后,您将设置status_id
为2,然后调用save
.无论save
成功还是失败,本地值status_id
将保持为2.但是,数据库值取决于它是通过还是失败.
例3 嘿!除了重新加载之外,这与示例2相同.
这里有一些文档,但我不确定你会发现它有多大帮助:http: //apidock.com/rails/ActiveRecord/Persistence/save
http://apidock.com/rails/ActiveRecord/Persistence/reload
您可能想要检查是否save
成功或致电save!
以确保save
实际工作.
我希望有所帮助.
归档时间: |
|
查看次数: |
10606 次 |
最近记录: |