Hi all, I'm working on a polymorphic association and I've run into a bit of a stumbling block. I only seem to be able to traverse the relationship in one direction and not the other. This is what my code looks like:
class NodeEntry < ActiveRecord::Base acts_as_nested_set belongs_to :node, :polymorphic => true end
class Location < ActiveRecord::Base attr_accessor :name has_one :node_entry, :as => :node validates_presence_of :country, :region, :name end
class Meter < ActiveRecord::Base attr_accessor :name, :parent_id has_one :node_entry, :as => :node validates_presence_of :meter_identifier, :type_of_meter end
class MeterGroup < ActiveRecord::Base has_one :node_entry, :as => :node end
When I create a new location or meter I use the following code: @location = Location.new(params[:location]) @location_node = NodeEntry.new(:name => params[:location][:name]) @location_node.node = @location @location_node.save
After loading a location or meter object from the database, when I attempt to do a location.node I get an error saying the object doesn't have that method. When I load a node entry object I have no problem accessing its node and I get the correct class back.
I can get around this by doing a simple query such as: NodeEntry.first(:conditions => "node_id = #{loc.id} and node_type = 'Location'").name
but I had assumed active record should be doing this for me under the covers. Have I made a mistake somewhere or is this the expected behavior of polymorphic associations?