2015-11-16 2 views
0

Для приложения викторины я пытаюсь отображать ACTIVE вопросы, в которых текущий пользователь не ответил. В таблице ответов есть user_id и question_id, которые я пытаюсь использовать. Я думал, что я был близок со следующим запросом (в static_pages_controller.rb:.Поиск объектов через несколько условий в рельсах

@questions = Question.active_question.where.not(id: @user.answers) 

Это, кажется, не работает во всех ситуациях, когда я тестирую его, хотя я чувствую, что я близко, но не уверен, где идти отсюда. Довольно новое в Rails так высоко ценим любую помощь!

question.rb

has_many :answers 

    scope :active_questions, -> { where("? BETWEEN start AND end", Time.now.to_date)} 
    scope :activeAtDate, lambda{ |date = Date.today| where("? BETWEEN start AND end", date) } 

answer.rb

belongs_to :question 
    belongs_to :user 

    scope :user_answered, lambda {|q| where("question_id == (?)", q) } 

    validates_uniqueness_of :question_id, scope: :user_id 

user.rb

has_many :answers 

static_pages_controller.rb

def index 
    @user = current_user 

    if user_signed_in? 
     if @user.manager_id != nil 
     @manager = @user.manager_id 
     end 
     @my_team = User.where("manager_id = ? AND id != ?", @manager, @user.id) 
     @questions = Question.active_question.where.not(id: @user.answers) 

    end 

    @new_answer = Answer.new 


    end 

ответ

0

Довольно новый для Rails

Добро пожаловать - вы сделали очень хорошо до сих пор.

Я изначально думал, что вы должны отвечать на вопросы из своей ассоциации @user.answers - тогда я понял, что вам нужны вопросы, на которые пользователь не ответил.

... так что я хотел бы сделать следующее:

#app/models/user.rb 
class User < ActiveRecord::Base 
    def non_participating_questions 
    answered_questions = self.answers.pluck(:question_id) 
    Question.active_questions.where.not(id: answered_questions) 
    end 
end 

Это позволит вам позвонить:

@user = User.find params[:id] 
@questions = @user.non_participating_questions 

Преимущества присоединения к этой User модели является то, что вы можете использовать instance_method (так что вам не обязательно проходить @user каждый раз). Это также означает, что вы можете иметь дело со всеми ассоциативными данными, а также user (answers и т. Д.).

+1

Это сработало отлично! Я всегда был очень близок к тому, чтобы его получить, но что-то отбросит. Это реализация, которую я точно искал. В очередной раз благодарим за помощь. – Prkl8r