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.