1
def self.get_previous_feedback current_feedback
    Feedback.where("feedbacks.id < ?", current_feedback.id).order('created_at asc').last
end

def self.get_next_feedback current_feedback
    Feedback.where("feedbacks.id > ?", current_feedback.id).order('created_at asc').first
end
#current_feeedback is the show page of any feedback.( feedback/show/id=2)
  1. DB に 3 つのテーブルがあります。フィードバック、ユーザー、部門は一対多の関係でつながっています。

  2. 上記のコードを実行すると、次/前のフィードバックに移動できます。

  3. 私のユーザー (current_user) がログインしていて、prev/next をクリックすると、DB から次のフィードバックを取得したいと思います (上記の条件) + その feedback.department_id = current_user.deparment_id.

  4. department_id を含めるには、AND ステートメントを記述する必要があります。どうやってするか ?

4

3 に答える 3

0

2 つの条件を連鎖させることもできます。そうすれば、を使用する必要がなくなり、句ANDを再利用することもできます。department_id

def self.get_department_feedback current_user
    Feedback.where(department_id: current_user.deparment_id)
end

def self.get_previous_feedback(current_feedback,current_user)
    get_deparment_feedback(current_user).where("feedbacks.id < ?", current_feedback.id).order('created_at asc').last
end

def self.get_next_feedback(current_feedback,current_user)
    get_deparment_feedback(current_user).where("feedbacks.id > ?", current_feedback.id).order('created_at asc').first
end
于 2013-09-10T06:41:19.817 に答える
0

これを試して...

def self.get_previous_feedback(current_feedback,current_user)
    Feedback.where("id < ? & department_id = ?", current_feedback.id, current_user.department_id).order('created_at asc').last
end

def self.get_next_feedback(current_feedback,current_user)
    Feedback.where("id > ? & department_id = ?", current_feedback.id, current_user.department_id).order('created_at asc').first
end
于 2013-09-10T05:21:23.420 に答える
0

正しい論理を教えてくれてありがとう。上記のクエリが正しく機能するには、ビットを変更する必要があります。

  1. 単に id がフィードバック テーブルにリンクしていないため、feedbacks.id を使用する必要がありました
  2. & は AND に置き換える必要があります。
  3. 修正コード:

    Feedback.where("feedbacks.id < ? AND feedbacks.department_id = ?", current_feedback.id, current_user.department_id).order('created_at asc').last

ありがとう !:)

于 2013-09-10T06:03:47.127 に答える