On Monday, August 18, 2014 12:29:06 AM UTC-4, Phil wrote:
Thanks for the reply. It still seems to be a systemic integrity problem. But the additional info on another work around is welcome.Phil
On Sunday, August 17, 2014 9:17:10 PM UTC-7, tamouse wrote:On Sun, Aug 17, 2014 at 8:57 PM, Phil <ph...@edgedesign.us> wrote:
I hate to reply to myself, but I narrowed it down to Rails caching by DEFAULT of model queries. It can be worked around by passing 'true', like this:tc.name = "something different"
tc.save!
tp.test_children.map {|x| x.name }.to_sentence # => "test1, test2, test3, and test4" *WRONG*
tp.test_children(true).map {|x| x.name }.to_sentence # => "test1, test2, test3, and something different" *CORRECT*
Another workaround is to just stop using has_many and such in favor of manual functions, a la:
def test_children
return TestChild.where(["test_parent_
id = ?", self.id])
end
Is there a way to turn this sort of caching off globally? (Other caching is fine, I don't want to turn all caching off.)
BTW- It is a bit mind blowing that this is turned on by default. Possible data corruption shouldn't ever be preferred by default over (possible) speed gains. I'd still categorize this as a serious bug, at least as a configuration default.
Try tp.reload after you make a change in the collection the way you have been. If you had been building your children entries as:tp.children.create(name: "test1")tp would be fully cognizant of all it's children.
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-talk+unsubscribe@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-talk/5eb4a1f9-834a-4530-b315-c3b8333bf4b8%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
No comments:
Post a Comment