Есть проблемы в отношении сохранения ActiveRecord ассоциаций и нужна ваша помощь :)Rails: ActiveRecord ассоциации сохранение проблемы
Мне нужно добавлять статьи сливающихся функциональность унаследованного кода.
Он должен работать следующим образом: текст
- Merge статья «источник» в к «цели» статьи.
- Проверьте комментарии «источника» и, если таковые имеются, повторно привяжите их к «цели».
- Уничтожьте статью «источник». Комментарии должны быть сохранены и связаны с «мишенью».
Код модели моей статьи (уменьшен для удобства чтения).
class Article < Content
before_destroy :reload_associated_comments
has_many :comments, :dependent => :destroy, :order => "created_at ASC" do
def reload_associated_comments
unless self.comments.empty?
article = Article.find(@merge_with)
self.comments.each do |comment|
comment.article = article
article.save!
end
end
end
def merge_with(id)
@merge_with = id
article = Article.find(@merge_with)
if !article.nil?
text = article.body + body
article.body = text
article.save!
self.destroy
return article
end
nil
end
end
Вот комментарий модель (также снижается):
class Comment < Feedback
belongs_to :article
end
Проблема заключается в том, когда я вернусь из before_destroy крючок ничего не сохранены в базе данных. Я проверяю его по следующим адресам:
eval Article.find(target_article_id).comments
Save не исключает никаких исключений. Что мне здесь не хватает?
Заранее благодарен!
Это работал для меня
def merge_with(id)
@merge_with = id
article = Article.find(@merge_with)
unless article.nil?
text = article.body + body
article.body = text
article.save!
reload_associated_comments
self.reload
self.destroy
return article
end
nil
end
В этом способе reload_associated_comments он должен быть comment.save! вместо article.save! Я думаю :) – Zippie
также я не уверен, но я думаю, вы не можете назвать self.destroy внутри метода, который называется self. Верните статью, а затем уничтожьте ее извне (где вы вызываете метод 'merge_with'). – Zippie
Метод' reload_associated_comments' используется как обратный вызов 'before_destroy'. Если я вызываю article.save !, разве это не означает, что комментарии сохраняются автоматически? Если это не так, то каков правильный порядок сохранения. Комментарий, а затем статью или наоборот? – niebelung