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