I would start by getting rid of the :foreign_key  specifications
unless you are doing something non standard.

On Aug 18, 2:26 pm, Rick R <[email protected]> wrote:
> On Wed, Aug 18, 2010 at 3:04 PM, Rick R <[email protected]> wrote:
> > I'm a rails newb and have been Googling about this, but I'm still stumped.
>
> > Not showing everything here, but basically it should be a pretty common
> > setup so I'm sure others know what I'm doing wrong.
>
> > - A meter can belong to many meter_groups
> > - A meter_group can have many meters.
> > - A user can 'subscribe' to viewing a meter_group (Subscription) so he
> > should be able to see the meters that are in that meter_group of the
> > subscription (think subscribing to a topic in a forum.)
>
> > Initially I was only allowing a single meter to belong to only one
> > meter_group and the following test and relationship of a Subscription worked
> > fine:
>
> > class Subscription < ActiveRecord::Base
> >   belongs_to :user, :foreign_key => "user_id"
> >   belongs_to :meter_group, :foreign_key => "meter_group_id"
> >   has_many :meters, :through => :meter_group
> > end
>
> > test "group1 and group2 belong to rachel" do
> >     user = User.find_by_login("rachel")
> >     subscriptions = Subscription.find_all_by_user_id(user.id)
> >     subscriptions.each do |s|
> >       meters = s.meters
> >       meters.each do |m|
> >         puts "meter = #{p m}"
> >       end
> >     end
> >   end
>
> As a side note, there isn't an issue if I try to get meters directly from
> the meter_group. For example in the above test it works if changed to:
>
> test "group1 and group2 belong to rachel" do
>     user = User.find_by_login("rachel")
>     subscriptions = Subscription.find_all_by_user_id(user.id)
>     subscriptions.each do |s|
>     *meter_group = s.meter_group
>     meters = meter_group.meters*
>     meters.each do |m|
>         puts "meter = #{p m}"
>       end
>     end
>   end
>
>
>
>
>
> > However now things are not working since I created some HABTM relationships
> > for meter_group and meters. I end up with the following error:
>
> > ActiveRecord::HasManyThroughSourceAssociationMacroError: Invalid source
> > reflection macro :has_and_belongs_to_many for has_many :meters, :through =>
> > :meter_group.  Use :source to specify the source reflection.
>
> > Here are some of the other relevant tables and migrations (stripped of a
> > few non-related fields):
>
> > class MeterGroup < ActiveRecord::Base
> >   belongs_to :user, :foreign_key => "user_id"
> >   has_and_belongs_to_many :meters
> > end
>
> > class Meter < ActiveRecord::Base
> >   has_and_belongs_to_many :meter_groups
> >   belongs_to :user, :foreign_key => "user_id"
> > end
>
> > #Migrations (removed some cols and drop section)
>
> > class CreateMeterGroups < ActiveRecord::Migration
> >   def self.up
> >     create_table :meter_groups do |t|
> >       t.string :name
> >       t.string :description
> >       t.integer :user_id
>
> >       t.timestamps
> >     end
> >   end
> > end
>
> > class CreateMeters < ActiveRecord::Migration
> >   def self.up
> >     create_table :meters do |t|
> >       t.integer :meter_type_id
> >       t.integer :scale_id
> >       t.integer :user_id
> >       t.string :name
> >       t.string :description
>
> >       t.timestamps
> >     end
> >   end
> > end
>
> > class CreateMetersMeterGroups < ActiveRecord::Migration
> >   def self.up
> >     create_table :meter_groups_meters, :id => false  do |t|
> >       t.integer :meter_id
> >       t.integer :meter_group_id
>
> >       t.timestamps
> >     end
> >   end
> > end
>
> > class CreateSubscriptions < ActiveRecord::Migration
> >   def self.up
> >     create_table :subscriptions do |t|
> >       t.integer :user_id
> >       t.integer :meter_group_id
>
> >       t.timestamps
> >     end
> >   end
> > end
>
> --
> Rick R

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.

Reply via email to