我尝试使用以下步骤更新2个模型。
第
ArticleHistory
这些模型与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表达。 经过这次修改,文章有多条记录。
请告诉我。
答案 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!
注意:此代码只是为了让您了解如何完成。 您将需要对其进行修正并使其实际工作。