I have been using RoRfor a few days, so excuse me if this is a basic question. I am trying to save a model object from an action in a controller. When I call a method on the model object that causes a state change, then call save, no sql is generated. However, if I modify the model object property directly from the controller, then call save, sql is generated. Here is an example of what I am talking about: Model object ----------------- class MyClass < ActiveRecord::Base def modifyModel aDate = Date.today end end Controller ------------- # this method generates a sql update def method1 @myClass = MyClass.find(params[:id]) @myClass.aDate = Date.today @budget_entry.save! <...rest of code omitted...> end # this method does not generate a sql update def method2 @myClass = MyClass.find(params[:id]) @myClass.modifyModel @budget_entry.save! <...rest of code omitted...> end Can someone please steer me in the right direction? I want to encapsulate the state change to certain methods of the model. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Frederick Cheung
2008-Dec-01 08:38 UTC
Re: calling save on model object does not generate a sql update
On Dec 1, 12:51 am, wb <wbow...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> I have been using RoRfor a few days, so excuse me if this is a basic > question. > > I am trying to save a model object from an action in a controller. > > When I call a method on the model object that causes a state change, > then call save, no sql is generated. > However, if I modify the model object property directly from the > controller, then call save, sql is generated. >The first thing is that save on an unchanged object is a no-op as of rails 2.1 (when partial updates was added).> def modifyModel > aDate = Date.today > endThis method does not change the aDate attribute: it just sets a local variable called aDate (which is forgotten about as soon as that method returns). To disambiguate and force ruby to call your accessor you need to do self.aDate = Date::today Fred --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---