Forum: Ruby on Rails polymorphic problema

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.
Chris H. (Guest)
on 2009-04-19 04:51
(Received via mailing list)
It appears that I have the models and migrations set up correctly.

In case anyone is wondering why i set it up like this I had it working
with just a contact model and this will save a bunch of coding changes
to my already working CRUD ajax inline contact form.  I am adding a
contrator model so I would like to have a polymorphic setup so I can
differentiate the two types of people in the form.

I have a Person that is polymorphic,, it will have a contact and
contractor type.

class Person < ActiveRecord::Base
  belongs_to :contactable, :polymorphic => true
end

class Contact < ActiveRecord::Base
  has_many :people, :as => :contactable
end

When I do:

person = Person.create(params[:person])
@contact = Contact.create(params[:contact])
person.contactable = @contact


It goes without an error but puts NIL in the contactable_type and
contactable_id  columns.

Anyone have an idea why?  I spent a couple hours with this earlier.
Chris H. (Guest)
on 2009-04-19 10:16
(Received via mailing list)
In case anyone is wondering here is the migration:

class CreatePeople < ActiveRecord::Migration
  def self.up
    create_table :people do |t|
      t.integer     :company_id
      t.references   :contactable, :polymorphic => true

      t.timestamps
    end
  end

  def self.down
    drop_table :people
  end
end
Frederick C. (Guest)
on 2009-04-19 21:28
(Received via mailing list)
On Apr 19, 1:50 am, Me <removed_email_address@domain.invalid> wrote:
> person = Person.create(params[:person])
> @contact = Contact.create(params[:contact])
> person.contactable = @contact
>
> It goes without an error but puts NIL in the contactable_type and
> contactable_id  columns.
>
> Anyone have an idea why?  I spent a couple hours with this earlier.

Are you saving the person record after having assigned the
contactable ?

Fred
Chris H. (Guest)
on 2009-04-20 03:22
(Received via mailing list)
The Create method saves on creation does it not?

On Sun, Apr 19, 2009 at 12:27 PM, Frederick C. <
Chris H. (Guest)
on 2009-04-20 03:28
(Received via mailing list)
Here is my stand alone script i just tried, still putting NIL in the
contactable columns:  I even tried person.contactable.save to no avail.

RAILS_ENV = 'development'

require File.dirname(__FILE__) + '/../config/boot'
require File.dirname(__FILE__) + '/../config/environment'

@contact = Contact.create(:name => 'moo')
@contact.save
person = Person.create(:company_id => '1')
person.save
person.contactable = @contact


On Sun, Apr 19, 2009 at 12:27 PM, Frederick C. <
Chris H. (Guest)
on 2009-04-20 04:19
(Received via mailing list)
Ok, I was looking at the DB for the contactable.type and id.  Why does
it
not show up there but when you query it is is there?

On Sun, Apr 19, 2009 at 12:27 PM, Frederick C. <
Chris H. (Guest)
on 2009-04-20 06:15
(Received via mailing list)
I did the example in rails recipe.  I can retrieve the addressable_id
and type when I create itfrom the console, but when I go log out and
go back and try to retrieve them they give back NIL just like the DB
shows.  Is the ID and TYPE supposed to show up in the DB?  I am still
getting NIL for  the polymorphic columns.  Stumped...
Chris H. (Guest)
on 2009-04-20 07:08
(Received via mailing list)
Ok, I did a new method instead of create and then the last thing I did
was a save and it works.  Anybody know why?
(Guest)
on 2009-04-21 17:22
(Received via mailing list)
Because assignment of the new parent record to a child is not
immideately persisted. You need to call save to persist it in the
database.

So this changes only the object in memory:
 person.contactable = @contact

This updates the database:
 person.contactable = @contact
 person.save

Dmitry
Chris H. (Guest)
on 2009-04-21 21:08
(Received via mailing list)
I did that even with the "create" methid, no luck.  I had to use the
"new"
method and save it for it to write to the db.

On Tue, Apr 21, 2009 at 8:21 AM, removed_email_address@domain.invalid <
This topic is locked and can not be replied to.