Rails 4:使用嵌套模型表单保存用户选择

时间:2015-08-09 00:21:40

标签: ruby-on-rails devise rails-activerecord nested-forms

我正在开展一个项目,我需要在一个部分的末尾测试用户。使用嵌套模型表单我希望users能够选择answers并存储这些表单。我正在尝试为自己构建它以改进并且可以使用来自更有经验的开发人员的建议来解决这个问题。

我假设通过关系这是多对多的,我需要一个连接表,但我不清楚如何表现它以允许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

如何最好地实现我的目标的任何见解/建议将非常感激。

1 个答案:

答案 0 :(得分: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设置许多selected_answers和许多possible_answers。也许从设置测试和答案开始,然后继续选择答案。