In my app, User objects can follow each other, and be followed. The two relationships are distinct. I''m seeing that when I set `user_a.follows << user_b` that `user_b.followed_by.count` still == 0. Why? When I play in the console, I see: [code] $ jordan = User.new(:name=>"Jordan") => #<User id: nil, name: "Jordan"> $ matt = User.new(:name=>"Matt") => #<User id: nil, name: "Matt"> $ matt.followers << jordan => [#<User id: nil, name: "Jordan">] $ matt.followers.first => #<User id: nil, name: "Jordan"> $ jordan.friends.first => nil $ matt.save SQL (14.1ms) INSERT INTO "users" ("name") VALUES (?) [["name", "Matt"]] SQL (0.3ms) INSERT INTO "users" ("name") VALUES (?) [["name", "Jordan"]] SQL (0.4ms) INSERT INTO "followings" ("followee_id", "follower_id") VALUES (?, ?) [["followee_id", nil], ["follower_id", 2]] => true [/code] My objects are defined as: [code] class User < ActiveRecord::Base has_many :follower_followee_rel, :class_name => "Following", :foreign_key => ''followee_id'', :dependent => :destroy has_many :friends, :through => :follower_followee_rel, :source => :followee has_many :followee_follower_rel, :class_name => ''Following'', :foreign_key => ''follower_id'', :dependent => :destroy has_many :followers, :through => :followee_follower_rel, :source => :follower end class Following < ActiveRecord::Base belongs_to :followee, :class_name => ''User'' belongs_to :follower, :class_name => ''User'' end [/code] Totally ignoring the second half of the relationship. No errors are raised. What''s going on? -- Posted via http://www.ruby-forum.com/. -- 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
On 18 September 2011 19:26, Jordan F. <lists-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org> wrote:> In my app, User objects can follow each other, and be followed. The two > relationships are distinct. > > I''m seeing that when I set `user_a.follows << user_b` that > `user_b.followed_by.count` still == 0. Why?I have not looked at your code in detail (no time at the moment) but have you tried reloading user_b from the db again? Possibly the one you have in memory will not know about the extra connection. Colin> > When I play in the console, I see: > > [code] > $ jordan = User.new(:name=>"Jordan") > => #<User id: nil, name: "Jordan"> > $ matt = User.new(:name=>"Matt") > => #<User id: nil, name: "Matt"> > $ matt.followers << jordan > => [#<User id: nil, name: "Jordan">] > $ matt.followers.first > => #<User id: nil, name: "Jordan"> > $ jordan.friends.first > => nil > $ matt.save > > SQL (14.1ms) INSERT INTO "users" ("name") VALUES (?) [["name", > "Matt"]] > SQL (0.3ms) INSERT INTO "users" ("name") VALUES (?) [["name", > "Jordan"]] > SQL (0.4ms) INSERT INTO "followings" ("followee_id", "follower_id") > VALUES (?, ?) [["followee_id", nil], ["follower_id", 2]] > => true > > [/code] > > My objects are defined as: > > [code] > class User < ActiveRecord::Base > has_many :follower_followee_rel, > :class_name => "Following", > :foreign_key => ''followee_id'', > :dependent => :destroy > has_many :friends, > :through => :follower_followee_rel, > :source => :followee > has_many :followee_follower_rel, > :class_name => ''Following'', > :foreign_key => ''follower_id'', > :dependent => :destroy > has_many :followers, > :through => :followee_follower_rel, > :source => :follower > end > > class Following < ActiveRecord::Base > belongs_to :followee, > :class_name => ''User'' > belongs_to :follower, > :class_name => ''User'' > end > [/code] > > Totally ignoring the second half of the relationship. > > No errors are raised. What''s going on? > > -- > Posted via http://www.ruby-forum.com/. > > -- > 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. > For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en. > >-- gplus.to/clanlaw -- 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
This is a total left field possibility, but I recently encountered a MySQl bug in a join query and found that upgrading fixed it. Here are my very verbose details: http://j.mp/nlRn5w On Mon, Sep 19, 2011 at 6:26 AM, Jordan F. <lists-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org> wrote:> In my app, User objects can follow each other, and be followed. The two > relationships are distinct. > > I''m seeing that when I set `user_a.follows << user_b` that > `user_b.followed_by.count` still == 0. Why? > > When I play in the console, I see: > > [code] > $ jordan = User.new(:name=>"Jordan") > => #<User id: nil, name: "Jordan"> > $ matt = User.new(:name=>"Matt") > => #<User id: nil, name: "Matt"> > $ matt.followers << jordan > => [#<User id: nil, name: "Jordan">] > $ matt.followers.first > => #<User id: nil, name: "Jordan"> > $ jordan.friends.first > => nil > $ matt.save > > SQL (14.1ms) INSERT INTO "users" ("name") VALUES (?) [["name", > "Matt"]] > SQL (0.3ms) INSERT INTO "users" ("name") VALUES (?) [["name", > "Jordan"]] > SQL (0.4ms) INSERT INTO "followings" ("followee_id", "follower_id") > VALUES (?, ?) [["followee_id", nil], ["follower_id", 2]] > => true > > [/code] > > My objects are defined as: > > [code] > class User < ActiveRecord::Base > has_many :follower_followee_rel, > :class_name => "Following", > :foreign_key => ''followee_id'', > :dependent => :destroy > has_many :friends, > :through => :follower_followee_rel, > :source => :followee > has_many :followee_follower_rel, > :class_name => ''Following'', > :foreign_key => ''follower_id'', > :dependent => :destroy > has_many :followers, > :through => :followee_follower_rel, > :source => :follower > end > > class Following < ActiveRecord::Base > belongs_to :followee, > :class_name => ''User'' > belongs_to :follower, > :class_name => ''User'' > end > [/code] > > Totally ignoring the second half of the relationship. > > No errors are raised. What''s going on? > > -- > Posted via http://www.ruby-forum.com/. > > -- > 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. > For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en. > >-- 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.