2016-06-26 3 views
0

私はdeviseacts_as_votableの宝石を使って、ユーザーが投稿に投票できるようにしています。私の現在の目的は、ユーザーが好きな投稿のリストを照会することです。Devise and acts_as_votable:votes_for voter_id => current_user.id

私は、投稿がvotes_forに投票されたとき、タイムスタンプ、投票の重み、そしてvoter_idのような情報を含むテーブルが追加されていることを知りました。ここで

は(私はusers/showページに同類を照会しようとしてるのでuserコントローラ)userコントローラは次のようになります。

@user = current_user 
@links = Link.all 

@likes = @links.where.votes_for(:voter_id => @user.id) // line I'm trying to figure out, I reckon it'd look something like this 

それはだ場合、私は間違いなく、完全にこのことについて間違った道を進んですることができ私はちょうどある方向に感謝する場合。

私はRailsの基本を学び、その命名規則を畳み込み、追跡するのは難しいです。

答えて

1

あなたが工夫を使用している場合は、私がcurrent_user方法は、あなたのビューで利用可能であるべきと思う、あなたはActiveRecordのは、あなたがここでの文書の中に見たいと思うかもしれませんどのように機能するかを理解するために@user

への再割り当てを必要はありません。

リンクやvoter_idについては、ここで私はあなたのクエリがされるべきだと思う方法です:

@likes = Link.where(votes_fors: {voter_id: current_user.id}) # OR Link.where(voter: current_user) 

基本的にクエリが言うSQLクエリに変換されます。

"SELECT * FROM links INNER JOIN votes_fors ON links.id = votes_fors.votable_type='Link' WHERE votes_fors.voter_id = ?" [voter_id, 1] 

あなたはアイデアを得る?

より良いアプローチは、上記で

class User 
    has_many :votes_fors, foreign_key: :voter_id 
    has_many :favorites, through: :votes_fors, source: :votable # not really sure of this syntax but it should work I think. 
end 

を例えば、あなたが行うことができるはずこれらのコレクションを取得するためのActiveRecordのメソッドを使用することです:あなたが投票し、すべてのリンクを取得します

current_user.favoritesユーザーによって。

関連する問題