2014-10-18 138 views
0

我很難搞清楚這一點。在我的索引頁面上,我有一個隱藏投票卡的開關。 kaminari分頁寶石的工作方式,如果你已經投了前10張牌,第1頁的顯示結果將少於10張牌。所以我試圖刪除用戶投票的卡片,如果參數存在。來自陣列的Rails陣列拒絕

如何設置@ cards.reject以處理要刪除的項目數組?

cards_controller.rb

@cards = Card.all 
@card_total = @cards.count 
@three_pics = @cards.sample(3, random: 1) 
@new_cards = @cards.last(5).reverse! 
if params[:voted] == 'on' then 
    @voted = Vote.where(:user_id => current_user.id).select(:card_id) 
    @cards = @cards.reject { |item| block } 
end 
if params[:view] == 'new' then 
    @cards = @cards.order(created_at: :desc).page(params[:limit]) if params[:limit] 
elsif params[:view] == 'old' then 
    @cards = @cards.order(created_at: :asc) 
elsif params[:view] == 'least_pop' then 
    @cards = @cards.order(popularity: :asc, created_at: :asc) 
else 
    @cards = @cards.order(popularity: :desc, created_at: :desc) 
end 

更新

讓我用一個例子和一些更新的代碼

@voted_did = Vote.where(:user_id => current_user.id).pluck(:card_id) 

@voted = [1,3闡述, 8]

@cards = [{「id」=>「1」,「event」=>「Some Event」,{「id」=>「2」,「event」=>「Some Event」,... ...},{「id」=>「3」,「event」=>「Some Event」,........},{「id」=>「4」,「event」 =>「Some Event」,........},{「id」=>「5」,「event」=>「Some Event」,........},{「id 「=>」5「,」event「=>」某事件「,........},{」id「=>」7「,」事件「=>」某事件「,... ...},{「id」=>「6」,「event」=>「一些事件」,........},{「id」=>「9」,「event」 =>「一些事件」,........}}

我想弄清楚如何從@cards中刪除id,但是如果找到該id的整個數組in @voted

回答

0

那麼選擇未被用戶投票的牌呢?

,如:@voted = Vote.where.not(user_id: current_user.id)

順便說一句,你從來沒有真正發送的塊中:

@cards.reject { |item| block } 

塊部分應該是邏輯;)

+0

感謝cards.rejected上@尖,我還是錯過了一些艱難的事情。我認爲拉動用戶沒有投下的所有選票來取消他們投票的卡將是一個漫長的過程。 – Ian 2014-10-19 03:30:37

+0

所以部分塊應該包含你的邏輯,可以是這樣的: @ cards.reject {| item | @ voted.include?(item [:id])} – pazinjanka 2014-10-19 08:19:27