2014-02-14 40 views
0

我的應用程序有簡單的用戶/帖子/投票結構,用戶可以在每個帖子上進行投票/反對投票。我想讓用戶在索引頁面查看「他們自己的未投票帖子」,我試過wherewhere.not,但無法將它合併起來。我的Rails應用讓用戶在帖子上投票,如何讓用戶在索引頁面看到「他自己的未投票」帖子?

我試圖在posts_controller中這樣做,我最好的辦法是找到所有未投票的帖子,但不知道如何獲得與用戶的相關信息。

def index 
if logged_in? 
    @posts = Post.where.not(id: Vote.all.map(&:voteable_id)) 
else 
    @posts = Post.all.sort_by{|x| x.total_votes}.reverse 
end 

這次投票是多態的關聯,下面是3種型號:

Post: has_many :votes, as: :voteable, 
Vote: belongs_to :voteable, polymorphic: true, 
User: has_many :votes 

logged_in?判斷是否存在@current_user

這裏是我的回購:https://github.com/Tim-Feng/ad-judge

+0

用戶如何與投票相關?顯示您的模型關聯代碼,並且可能會更容易幫助您更新查詢。 –

+0

您好@ChrisPeters,我在投票模型上使用多態關聯,下面是3個模型:'Post:has_many:votes,as::voteable','Vote:belongs_to:voteable,polymorphic:true','User:has_many:votes ' – Disco26

回答

1

我不知道你所說的「自己的unvoted帖」既然你有示例代碼是一種混亂的意思。

如果你需要找到哪些是沒有投票權的當前用戶的帖子,你應該做到以下幾點:

current_user.posts.where.not(id: Vote.pluck(:voteable_id).uniq) 

如果在另一方面,你需要找到一個還沒有被選爲當前用戶的帖子,你應該只使用當前用戶的票,像這樣:

Post.where.not(id: current_user.votes.pluck(:voteable_id).uniq) 

希望它可以幫助

TIP:如果您需要提高代碼效率,則可以使用左連接將其全部運行到一個查詢中,而不是搜索除except之外的ID。

+0

這是第二個,它的工作原理!對不起我的混淆代碼。而對於小費,我不知道剩下的是什麼,但我會發現。謝謝! – Disco26

相關問題