2015-08-09 2 views
0

Я работаю над проектом, где мне нужно будет протестировать пользователей в конце раздела. Используя форму вложенной модели, я бы хотел, чтобы для users можно было выбрать answers и сохранить их. Я пытаюсь создать для себя возможность улучшить и использовать советы более опытных разработчиков о том, как наилучшим образом подойти к этому.Rails 4: Сохранение пользовательских настроек с помощью вложенной формы модели

Я предполагаю, что это взаимосвязь «многие ко многим», и мне нужен стыковочный стол, но я не понимаю, как это сделать, чтобы позволить users выбрать их answers. Должен ли я создать контроллер для этой новой таблицы соединения, или я недопонимаю ActiveRecord в этом случае?

Мои модели являются:

class User < ActiveRecord::Base 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 
end 

class Test < ActiveRecord::Base 
    has_many :questions, :dependent => :destroy 
    accepts_nested_attributes_for :questions 
end 

class Question < ActiveRecord::Base 
    belongs_to :test 
    has_many :answers, :dependent => :destroy 
    accepts_nested_attributes_for :answers 
end 

class Answer < ActiveRecord::Base 
    belongs_to :question 
end 

Любое понимание/советы о том, как наилучшим образом достичь своей цели будет крайне признателен.

+0

Посмотрите это видео о 'inested-forms' http://railscasts.com/episodes/196-nested-model-form-part-1 – Emu

ответ

1

Существуют различные решения, которые вы можете попробовать. Один из способов - установить ассоциации между тестом и ответами через вопросы.

user.rb

class User < ActiveRecord::Base 
    has_one :test 
end 

test.rb

class Test < ActiveRecord::Base 
    belongs_to :user 
    has_many :answers, dependent: :destroy 
    has_many :questions, through: :answers 

    accepts_nested_attributes_for :answers, allow_destroy: true 
end 

question.rb

class Question < ActiveRecord::Base 
    has_many :answers, dependent: :destroy 
end 

answer.rb

class Answer < ActiveRecord::Base 
    belongs_to :test 
    belongs_to :question 
end 

Что касается того, чтобы пользователи могли выбирать ответы, вам может потребоваться настроить отдельные ассоциации для ответа, чтобы иметь много избранных пользователей и много возможных_пользователей через selected_answers. Возможно, начните с создания тестов и ответов, а затем перейдите к выбору ответов.

+0

Спасибо за ваш быстрый повтор Margo. Я попробую и дам вам знать, как это происходит. Очень ценится от усталого парня :) – Ryan

Смежные вопросы