如何更新彼此关系的模型之一?

时间:2017-02-03 03:15:43

标签: ruby-on-rails activerecord

我尝试使用以下步骤更新2个模型。

    • ID
    • CURRENT_VERSION
    • 状态
  1. ArticleHistory

    • ID
    • 的article_id
    • 标题
    • 含量
    • 版本
  2. 这些模型与article_id和current_version = version有关。

    首先,我们制作了一张这样的唱片。

    article.id:1
    article.current_version:1
    article.status:public
    article_history.id:1
    article_history.title:"test title"
    article_history.content:"test content"
    article_history.version:1
    

    我会像这样更新。在此之前,我想用新的id复制现有的ArticleHistory记录。我的意思是,它就像更新ArticleHistory一样。

    article.id:1
    article.current_version:2
    article.status:public
    (copied)article_history.id:2
    (copied)article_history.title:"updated test title"
    (copied)article_history.content:"updated test content"
    (copied)article_history.version:2
    

    但现在,我无法弄清楚如何用RoR ActiveRecord表达。 经过这次修改,文章有多条记录。

    请告诉我。

1 个答案:

答案 0 :(得分:0)

class Article
  has_many :article_histories

应该做的伎俩。如果您需要更多,has_many的doco就在这里:

http://apidock.com/rails/ActiveRecord/Associations/ClassMethods/has_many

如果这不合适 - 那么请告诉我们为什么它不适合你:)

要复制......

# first find the article_history with the highest version for this article
latest_history = article.article_histories.order(:version).last
# if there isn't one, create a new one
if latest_history.blank?
  new_history = article.article_histories.new(params[:article_history])
  new_history.version = 1
else
  # Otherwise... merge params and the old attributes
  combined_attributes = latest_history.attributes.merge(params[:article_history])
  # and use that to create the newer article_history version
  new_history = article.article_histories.build(combined_attributes)
  new_history.version = latest_history.version + 1
end
new_history.save!

注意:此代码只是为了让您了解如何完成。 您将需要对其进行修正并使其实际工作。