Books、Notifications、NotificationTypesの3つのモデルがあります。 Notificationモデルにはbook_idがあるため、書籍には通知があります。通知モデルが1 notification_type_idSQL noobには、ジョインを含むRailsクエリの作成に役立つ必要があります。
私は日付1とdate2の
books_set1 = Book.find :all, :conditions => ["created_at <= ? AND show_time >= ?", max_date, min_date]
間のすべての書籍が作成したいしかし、私は考えnotification.notification_type_id = 1の通知を持って本を欲しいと理想的には私はありませんがあるよう通知は1 NOTIFICATION_TYPEを持っていますnotification.notification_type.name = 'type1'の通知を受け取った書籍は欲しくないので
既に書籍のために作成されたタイプ1の通知があった場合は、それはセットに戻ってほしいです(私はcに行くのでそのタイプの通知を返されたセットでreateします)。
1つのクエリでこれを行う方法があるかどうかわかりませんが、私は2つのクエリとINTERSECTが必要と思っています - 最初に私はこの投稿に既に含まれています。しかし、擬似コードでは、私は、これはそれを行うに必要なものだと思う:
notification_type_id = Notification.find_by_name('type1')
get all notifications where notification_id = notification_type_id
set2 = get the associated book set from the notification set (since each notification has one book)
はその後、私はSET1行う - set2の
UPDATEを、私は2つのクエリを書かれているいくつかの助けに
感謝私に望ましい結果を得てください。誰もがそれを行う方法を知っている場合、私は1つのクエリであることを、このために大好きだ:
books_in_range = Book.find :all, :conditions => ["created_at <= ? AND created_at >= ?", max_date, min_date]
books_without_these_notifications = Book.find(:all, :joins => { :notifications => :notification_type }, :conditions => ["notification_types.name = ?","type1"])
books_to_consider = books_in_range - books_without_these_reminders
を繰り返しますが、アイデアはTYPE1の通知が作成されており、特定の日付範囲内に収まっていないすべての書籍を取得することです。
私の答えに存在しないオプションを試しましたか?日付範囲内のすべての書籍を取得してから、すべての書籍をタイプ1の通知で取得するよりも、ほぼ確実に効率的です。 – Shadwell
それは箱の外で働かない、notification_idは未定義です...しかしそれを修正し、あなたを更新し続けるでしょう。私に思い出させてくれてありがとう....私はモルフの答えにつきました – Tony
私は修正するために編集しました - この関連付けは本と通知の間の間違った方法でした。 – Shadwell