Forum: Ruby on Rails calling save on model object does not generate a sql update

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
A6f7fd54f634c1918dbffbf50e0d5fa3?d=identicon&s=25 wb (Guest)
on 2008-12-01 09:36
(Received via mailing list)
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.
81b61875e41eaa58887543635d556fca?d=identicon&s=25 Frederick Cheung (Guest)
on 2008-12-01 09:38
(Received via mailing list)
On Dec 1, 12:51 am, wb <wbow...@gmail.com> 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
>         end

This 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
This topic is locked and can not be replied to.