2016-07-11 2 views
0

Ich habe Modell BenutzerWie wählen Sie die Benutzer aus, bei denen "Bezahlt" wahr ist und "Bezahlte_ Abonnements verfallen" beim aktuellen Datum?

has_many: paid_subscriptions 

Modell PaidSubscription

belongs_to :user 

Wie ich für ausgewählte alle Benutzer aktive Datensatz Abfrage schreiben, wo paid ist true und paid_subscriptionsexpirence_at < aktuelle Tag?

EDIT:

User.includes(:paid_subscriptions).where("YEAR(created_at) = ? AND active = ?", 2011, true).where('paid_subscriptions.expirence_at < ?', Date.today) 

Antwort

2

Sie können versuchen, die folgenden:

User.includes(:paid_subscriptions) 
    .where('YEAR(users.created_at) = ? AND users.active = ? and paid_subscriptions.expirence_at < ?', 2011, true, Date.today) 
+0

Ihnen danken, aber: bezahlt ist Attribut des Benutzers – dev85

+0

mysql2 :: Fehler: Spalte 'created_at' in where-Klausel ist nicht eindeutig – dev85

+0

@Dimitri: In meiner Abfrage gibt es kein 'created_at', können Sie Ihren Code anzeigen? – potashin

-3
User.find(:all, includes: paid_subscriptions, conditions: ["paid_subscriptions.expirence_at < ?", Time.now.todate]) 
+1

Willkommen zu SO. Wie und warum hilft das dem OP bei seinem Problem? Kannst du bitte etwas ausarbeiten? – m00am

0

Probieren Sie etwas wie dieses

user.rb

has_many :paid_subscriptions 
scope :paid, -> { where(paid: true) } 

paid_subscription.rb

belongs_to :user 
scope :past, -> { where('experience_at < ?', Date.today) } 

Ihre Abfrage in der Aktion

User.paid.joins(:paid_subscriptions).merge(PaidSubscription.past) 
Verwandte Themen