Before_update callback is called when new record is created

All my tables/models have a “revision” field, and I have a
before_update callback to increment the revision field.

Among my tables are:
events
rooms
events_rooms

In my Event model, I have:
has_many :eventRooms
has_many(:rooms, :through => :eventRooms)

When I create an event, assign a room or two, and then save, the
“events_rooms” table entry is initially created with a revision of 1,
and then (immediately, automatically, and inexplicably) updated to have
a revision of 2. I do not want every new record to have a revision
number of 2. The revision 2 version is identical to revision 1 (which
it replaces), aside from the revision number.

I can reproduce this in the rails console with the following:
event = Event.new({‘name’ => ‘Meeting 5’})
event.rooms << Room.find([‘1’, ‘2’])
event.save

Does anyone have any idea why this could be happening or where I should
look for further troubleshooting?

I’m working trying to strip out all the weird stuff (there’s a lot) that
I had in my app, and remove anything proprietary so I can make a simple
test case.
So far, none of my simplifications have made this problem go away.

Oh, yeah, and the standard details:
Rails 4.1.6
MariaDB
SuSE Linux

On Wed, 15 Oct 2014 17:01:56 -0400

On Thu, 16 Oct 2014 09:58:16 -0400
Brian S. [email protected] wrote:

has_many(:rooms, :through => :eventRooms)

When I create an event, assign a room or two, and then save, the
“events_rooms” table entry is initially created with a revision of 1,
and then (immediately, automatically, and inexplicably) updated to hav
a revision of 2. I do not want every new record to have a revision
number of 2. The revision 2 version is identical to revision 1 (which
it replaces), aside from the revision number.

My workaround is to do my before_update as follows:
before_update :incr_rev

private
def incr_rev
  if changed?
    self.revision = self.revision + 1
  end
end

With this workaround, it still calls the before_update callback when I
create a new record, but doesn’t actually do an update.

I’m baffled that it would be calling the before_update callback if it’s
not changed, but it does.

Starting to wonder if I’ve found a bug.

On Thu, 16 Oct 2014 19:58:52 +0100
Colin L. [email protected] wrote:

In my Event model, I have:
I can reproduce this in the rails console with the following:
added?

Does it save it twice?

it does a sql INSERT followed by a sql UPDATE (both) after “event.save”.

On 15 October 2014 22:01, Brian S.
[email protected] wrote:

has_many(:rooms, :through => :eventRooms)
event.rooms << Room.find([‘1’, ‘2’])
event.save

Does anyone have any idea why this could be happening or where I should
look for further troubleshooting?

Just to be clear you are saying that the above code invokes
before_update once where you would not expect it to be called at all?
If so is it invoked by the save or does it get called when the room is
added?

Does it save it twice?

Colin

On Thu, 16 Oct 2014 20:56:28 +0100
Colin L. [email protected] wrote:

Strictly it will be during event.save call (before the UPDATE).
Presumably it is adding the room that is triggering the problem. It
does look like a bug to me. Do you know whether it happened with
earlier versions of Rails? If not then almost certainly a bug.

Dunno… the only versions of Rails that I’ve ever used are 1.something
and 4.1.6.

Well, I’ve created an issue in the rails issue tracker. We shall see.

On 16 October 2014 21:16, Brian S.
[email protected] wrote:

Well, I’ve created an issue in the rails issue tracker. We shall see.

Can you post a link please?

Thanks

Colin

On 16 October 2014 20:14, Brian S.
[email protected] wrote:

rooms
number of 2. The revision 2 version is identical to revision 1 (which
Just to be clear you are saying that the above code invokes
before_update once where you would not expect it to be called at all?
If so is it invoked by the save or does it get called when the room is
added?

Does it save it twice?

it does a sql INSERT followed by a sql UPDATE (both) after “event.save”.

Strictly it will be during event.save call (before the UPDATE).
Presumably it is adding the room that is triggering the problem. It
does look like a bug to me. Do you know whether it happened with
earlier versions of Rails? If not then almost certainly a bug.

Colin

On Thu, 16 Oct 2014 21:51:53 +0100
Colin L. [email protected] wrote:

Well, I’ve created an issue in the rails issue tracker. We shall see.

Can you post a link please?