2014-08-29 65 views
2

我有三個類:用戶,訂閱和計劃。我想加載用戶沒有的所有計劃。在Rails中最好的方法是什麼?紅寶石刪除常見元素集合

我有兩個類別:current_user.subscriptionsPlan.where(active: true) ,我使用mongoid

def dashboard 
    @plans = Plan.where(active: true)#.each { @plans.delete_if has_current_user_plan  subscription.title } 
end 

def has_current_user_plan(name) 
    current_user.subscriptions.where(title: name, active: true).exists? 
end 
class User 
    has_many :subscriptions 
class Subscription 
    belongs_to :plan 
    belongs_to :user 
class Plan 
    has_many :subscriptions 

回答

6

AR:

class User < ActiveRecord::Base 
    has_many :subscriptions 
    has_many :plans, through: :subscriptions # !!! 
end 

Plan.where(active: true).where.not(id: current_user.plans) 

我不太確定Mongoid的最佳方法是什麼,因爲我從來沒有用過它。從我從文檔中收集的信息,儘管我沒有運行代碼,但下面的代碼可能會起作用。

Plan.where(active: true).not_in(_id: Subscription.where(user_id: current_user.id).pluck(:plan_id)) 
+0

謝謝,actualy我使用MongoID;所以我不能那樣做。任何其他想法? – 2014-08-29 22:38:26

+0

我已經更新了答案。方法是一樣的,收集用戶的計劃ID,然後選擇每個計劃的ID不匹配。 – 2014-08-30 14:23:14

+0

好的,謝謝;我會檢查並讓你知道,因爲我現在有問題與貝寶沙箱:(我不能完成訂閱過程告訴你,如果它工作正常,但至少它編譯好。 – 2014-08-30 18:52:10