Odd issue relating to polymorphic associations and find_or_c

Hi -

I have a GalleryEntry model. I also have a View model.

GalleryEntry has_many :views, :as => :viewable
View belongs_to :viewable, :polymorphic => true

My View schema looks like this:

create_table :views do |t|
t.column :views, :integer, :default => 0
t.column :viewed_on, :date
t.column :viewable_id, :integer
t.column :viewable_type, :string, :limit => 45
end

If I do this via console:

GalleryEntry.find(:first).views.find_or_create_by_viewed_on(Date.today)

the following SQL shows up in my logs (formatted for readability):

GalleryEntry Load (0.000656) SELECT * FROM gallery_entries LIMIT 1

ImageGalleryEntry Columns (0.011212) SHOW FIELDS FROM
gallery_entries

View Columns (0.002493) SHOW FIELDS FROM views

View Load (0.001140) SELECT * FROM views
WHERE (views.viewable_id = 14265
AND
views.viewable_type = ‘GalleryEntry’
)
AND (views.viewed_on = ‘2007-01-12’ )
LIMIT 1

SQL (0.000084) BEGIN

SQL (0.000265) INSERT INTO views
(viewed_on, views, viewable_type,
viewable_id)
VALUES
(‘2007-01-12’, 0, NULL, 14265)

SQL (0.000068) COMMIT

What I don’t understand is why during the “find” part of find_or_create
does it knows to set viewable_type = ‘GalleryEntry’, but then once it
doesn’t find it and goes to create it, it doesn’t set it correctly, but
instead uses NULL?

Is this a bug? Perhaps fixed in 1.2? My rails environment:

About your application’s environment
Ruby version 1.8.5 (i686-darwin8.8.2)
RubyGems version 0.9.0
Rails version 1.1.6
Active Record version 1.14.4
Action Pack version 1.12.5
Action Web Service version 1.1.6
Action Mailer version 1.2.5
Active Support version 1.3.1
Application root xxxxxxxx
Environment development
Database adapter mysql
Database schema version 171

Any and all insights are greatly appreciated! Thanks!

-philip

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs