2016-12-29 4 views
0

私のアプリでは、ユーザーは互いに従うことができます。私は2つのテーブル:usersfollowersを持っています。フォロワーモデルin Rails

users 

id 
name 

followers 

id 
user_id 
follower_id 

そして、二つのモデル:私は何をしたいか

class User < ActiveRecord::Base 

    has_many :followers 
    belongs_to :follower 

end 

class Follower < ActiveRecord::Base 

    belongs_to :user 

end 

は、ユーザーのフォロワーをリストです。例えばしかし、私は照会することができませんでしだ


...私はそれが働いてしまったディープの提案どおりに私のモデルを更新した後、それが関連を見なければ見えないしかし

<ul> 
    <% @users.each do |user| %> 
     <li><%= user.name %></li> 
     <ul> 
     <% user.followers.each do |follower| %> 
      <li><%= follower.name %></li> 
     <% end %> 
     </ul> 
    <% end %> 
</ul> 

...フォロワーとフォローしています。

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 

、その後、私のUserモデルに私が持っている:

私は私がUserControllerでの2つのメソッドを持っているユーザーまたはユーザーがフォローしているために信者を返すべきである

def get_followers 
    Follower.where(follower_id: self.id) 
end 

def get_following 
    Follower.where(user_id: self.id) 
end 

。ビューは次のようになります。

<% @followers.each do |follower| %> 
    <%= follower.user.name %> 
<% end %> 

<% @following.each do |following| %> 
    <%= following.user.name %> 
<% end %> 

ただし、表示されるはずのユーザーの名前のみを返します。

設定モデルは今のようになります。

class Follower < ActiveRecord::Base 

    belongs_to :user, foreign_key: 'follower_id', class_name: 'User' 

end 
+0

この音をし、名前をフェッチします。そして、あなたの問題:エラーメッセージ? – Fallenhero

+0

エラーは 'follower'をユーザとして見ないので' name'を見つけることができないということです... – Cameron

答えて

1

あなたfollowerモデルがnameという名前の属性を持っていないので、follower.nameが動作しません。またあなたが与えた協会はbelongs_to :userであり、それに続いてuserが取られます。あなたが好きなFollowerモデルで別の関連付けが必要です。あなたは何ができるか、あなたのビューで、その後

belongs_to :following_user, foreign_key: 'follower_id', class_name: 'User' 

とすることである:

<%= follower.following_user.name %> 

これが続いたユーザーを取得し、そのオブジェクトからそれがフェッチされますname属性

更新:

あなたが持っている既存の関連付けを削除しないでください。以下れるuserから構成されます続いているuserfollower_idから構成されますコメントuser_idで説明したように今

belongs_to :user  
belongs_to :following_user, foreign_key: 'follower_id', class_name: 'User' 

:あなたのモデルがどのように見えるべきであることを意味します。

ユーザーのfollowersを取得するには、followersという関連付けがあります。ちょうどuser.followersのように。続いユーザーを見つけるために

<% user.followers.each do |follower| %> 
    <li><%= follower.following_user.name %></li> 
<% end %> 

def followed_users 
    Follower.where(follower_id: id) 
end 

をし、名前フェッチする:より多くの `has_and_belongs_to_many`の関係のように

<% user.followed_users.each do |follower| %> 
    <li><%= follower.user.name %></li> 
<% end %> 
+0

'SQLite3 :: SQLException:no such column:users.follower_id:SELECT * "FROM" users "WHERE" users "。" follower_id "=? LIMIT 1' – Cameron

+0

'primary_key: 'id''を関連付けに含めることができますか? – Deep

+0

同じエラーが表示されます。 – Cameron