Я использую: через отношения между двумя моделями, потому что у меня есть дополнительные данные, которые я хочу сохранить в таблице соединений, иначе я бы просто использовал соотношение: source.Как хранить связанные данные модели с помощью модели в Rails
Но данные, которые я хочу сохранить, являются динамическими - это список вопросов, которые были добавлены в экземпляр одной из моделей, с которыми я соединяюсь. Пример:
Врачи добавляют уникальные вопросы, на которые пациенты должны отвечать при назначении на прием - д-р Фу хочет, чтобы его пациенты ответили «высота» и «вес», в то время как д-р Бар хочет, чтобы его патенты отвечали «возраст» и « Пол'.
Каков самый чистый способ хранения ответов на эти вопросы в экземпляре модели Appointment?
текущие модели:
class Question < ActiveRecord::Base
belongs_to :physician
end
class Physician < ActiveRecord::Base
has_many :questions
has_many :appointments
has_many :patients, through: :appointments
end
class Appointment < ActiveRecord::Base
belongs_to :physician
belongs_to :patient
end
class Patient < ActiveRecord::Base
has_many :appointments
has_many :physicians, through: :appointments
end
Заранее спасибо - я пришел через это несколько раз, и хотелось бы услышать хороший ответ на это - еще один пример: Пользователь принимает викторину. Quiz has_many Вопросы.
Как вы могли бы сохранить уникальные ответы на статический набор вопросов, которые есть у каждой викторины? Опять же, я застрял в использовании отношения: через отношения, используя таблицу соединений, называемую «Попытки».
Возможное решение, о котором я думал: Пациент has_many Surveys and Survey has_many Answers. Создайте это, когда будет создано новое Назначение. Проблема в том, что я считаю, что представления и контроллеры являются довольно сложными для чего-то столь же простого, как, например, для повторения моего вопроса, хранения данных, связанных с таблицей соединения.
Как насчет добавления belongs_to вопрос тоже в модели ответа. а затем пожарный запрос patient.answers.where (question_id in (physician.questions.pluck (: id) и destination_id = назначениеId) ... Предложение сериализации более холодное, чем я чувствую. Было бы дешевле при запуске запроса и общей сложности – jaspreet21anand
вопрос и ответные отношения понятны, но слишком академичны: что происходит, если вы хотите изменить текст вопроса, но у него есть несколько ответов, уже связанных? Если вы аннулируете старые ответы или предотвращаете редактирование вопросов? Что касается сериализации, это мой предпочтительный вариант, t требует слишком много логики, например, как проверка ответа или сложные обратные вызовы – fjuan