2016-06-26 25 views
0

我使用的是deviseacts_as_votable寶石,允許用戶在帖子上投票。我目前的目標是查詢用戶喜歡的帖子列表。Devise and acts_as_votable:其中votes_for voter_id => current_user.id

在Rails的控制檯我發現,在一個職位上votes_for表投票大幹快上包含像時間戳信息附加放眼望去,投票權重和voter_id這是我想時致電什麼。

下面介紹一下user控制器看起來像(user控制器,因爲我試圖查詢users/show頁面上的喜歡):

@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方法應該是提供你的看法,你不應該需要重新分配至@user

要了解的ActiveRecord是如何工作的,你可能要考慮的文檔在這裏。

至於鏈接和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] 

你明白了嗎?

一個更好的辦法是使用ActiveRecord的方法來獲取這些集合例如

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 

上述規定,你應該能夠做到:

current_user.favorites這將獲取你所有的鏈接投票由用戶。