In my app Users can follow each other. I have two tables: users
and followers
.
users
id
name
followers
id
user_id
follower_id
And two models:
class User < ActiveRecord::Base
has_many :followers
belongs_to :follower
end
class Follower < ActiveRecord::Base
belongs_to :user
end
What I want to do is list the followers for a user. e.g.
<ul>
<% @users.each do |user| %>
<li><%= user.name %></li>
<ul>
<% user.followers.each do |follower| %>
<li><%= follower.name %></li>
<% end %>
</ul>
<% end %>
</ul>
However it doesn't look to be seeing the association...
After updating my model as per Deep's suggestions I got it working... however I'm unable to query followers and following users.
e.g.
I have two methods in my UsersController:
def user_followers
@user = User.where(id: params[:id]).first
@followers = @user.get_followers
end
def user_following
@user = User.where(id: params[:id]).first
@following = @user.get_following
end
and then in my User model I have:
def get_followers
Follower.where(follower_id: self.id)
end
def get_following
Follower.where(user_id: self.id)
end
Which should be returning the followers for the user or who the user is following. The views look like so:
<% @followers.each do |follower| %>
<%= follower.user.name %>
<% end %>
<% @following.each do |following| %>
<%= following.user.name %>
<% end %>
However it only returns the name of the user I'm supposed to be viewing.
The Follower model now looks like:
class Follower < ActiveRecord::Base
belongs_to :user, foreign_key: 'follower_id', class_name: 'User'
end