在不同模型的对象之间复制属性但具有相同的属性名称

时间:2014-01-13 11:43:58

标签: ruby-on-rails ruby-on-rails-4

**这里的原始问题无法正确解释我的问题,对读者不好意思。你能否参考"更新"部分?谢谢**

假设我有两个模型 - QuestionsSolvedQuestions。我想要做的是将已解决的Questions复制到SolvedQuestions。该模型如下所示:Questions(id: integer, content: string, user_id: integer)SolvedQuestions(id: integer, question_id: integer, content: string, user_id: integer, solver_id: integer, solved_at: datetime )

所以问题是有没有办法将属性从Questions复制到具有相同属性名称的SolvedQuestions,除了明确地逐个复制值?原因是:1。当将新字段添加到Questions和SolvedQuestions时,未来可能更加强大。 2.节省时间。

有什么想法?谢谢:))

更新: 我同意状态属性会这样做!我想我选了一个非常糟糕的例子,所以请接受我的道歉。我试图解决的问题是用户可以编辑Questions所以我需要保留所有历史问题的实例。

在这种情况下,我应该使用示例:QuestionsQuestionsHistories。这就是为什么我要将问题的图像复制到QuestionHistories ...谢谢!

2 个答案:

答案 0 :(得分:0)

更好的结构

class Question < ActiveRecord::Base      
end

class SolvedQuestion < Question
  # when solved, set solved as true and
  # set question_id in solver.
  has_many :solvers
end

class Solver < ActiveRecord::Base
  belongs_to :solved_question
end

#Migration
create_table questions do |t|
  t.solved :boolean, default: false
  # others
end

简单的基本ActiveRecord设置。不需要花哨的东西。

答案 1 :(得分:0)

我认为最好的方法是只使用一个模型问题并添加一个类似已解决的布尔字段?并在问题模型中移动solver_id和solve_at。

您可以在范围

的帮助下过滤掉
scope :solved, where(:solved => true)
scope :not_solved, where(:solved => false)