On Wed, Aug 18, 2010 at 3:30 PM, Me <[email protected]> wrote:

> I would start by getting rid of the :foreign_key  specifications
> unless you are doing something non standard.
>
>
Ok, thanks. I removed them. (Didn't fix the issue but does look a lot
cleaner.)


> 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]<rubyonrails-talk%[email protected]>
> .
> For more options, visit this group at
> http://groups.google.com/group/rubyonrails-talk?hl=en.
>
>


-- 
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