У меня возникли проблемы с реализацией функции, которая позволяет пользователям видеть вопросы (моя модель), отсортированные или отфильтрованные на основе различных атрибутов, принадлежащих ей (например, был ли ответ на вопрос? сколько ответов на вопрос и т. д.), который будет основан на Question
атрибуты модели или атрибуты связанных моделей в Question
.
У меня есть следующие модели:
class Question < ActiveRecord::Base
belongs_to :course
belongs_to :user
has_many :answers, inverse_of: :question
belongs_to :accepted_answer, class_name: :answer, foreign_key: :accepted_answer_id
default_scope order: 'questions.created_at DESC'
end
class Answer < ActiveRecord::Base
belongs_to :user
belongs_to :question, inverse_of: :answers
has_many :a_votes
default_scope order: 'answers.created_at DESC'
def accepted?
return false if new_record?
question.try( :accepted_answer_id ) == id
# an alternative is to use question.try( :accepted_answer ) == self
end
end
Я бы добавил сортировку или фильтры в контроллере, такие как «Просмотреть только отвеченные вопросы», где только вопросы с question.accepted_answer == true
. Каков наилучший способ добиться этого? И есть ли какие-либо руководства по фильтрации/сортировке ActiveRecord, которые я мог бы использовать для дальнейшего использования?
Спасибо!!
Приложение
Я показываю вопросы в том виде, в котором они отображаются _question.html.erb
, и вызываю их через функцию show
родителя вопроса, Group
(таким образом, каждый Group
будет has_many
вопросов)
class CoursesController < ApplicationController
def show
@course = Course.find(params[:id])
# @questions = @course.questions.all this is the default selection
@questions = @course.questions.by_answer_count #maybe Im not calling the scope correctly (and sorry if I am making a noob mistake..)
end
#There are other methods not shown
end