It's not a systemic integrity problem, it is the way Rails has always worked. Using tp.test_children.create() is not "another work-around", it is the recommended way of adding children to a parent model that you have already instantiated and has been available for as long as I can remember (at least since rails 2.0.x).
Scenarios where you would actually need to re-query the database *every time you access a relation* are rare. If you really need to, you have that option, but in no way should that be a default. Jim 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 <[email protected]> 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 [email protected]. To post to this group, send email to [email protected]. 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.

