0
我有三個模型Article
,Author
和AuthorLine
以多對多映射表示文章及其作者之間的關係。在保存模型之前更新其他關聯屬性
class Article < ActiveRecord::Base
has_many :author_lines, :dependent => :destroy
has_many :authors, :through => :author_lines, :dependent => :destroy, :order => 'author_lines.position'
attr_accessor :author_list
end
class Author < ActiveRecord::Base
has_many :author_lines
has_many :articles, :through => :author_lines
end
class AuthorLine < ActiveRecord::Base
validates :author_id, :article_id, :position, :presence => true
belongs_to :author, :counter_cache => :articles_count
belongs_to :article
end
的AuthorLine
模型有一個附加屬性position
,它告訴作者的順序的文章。
下面是我在做什麼,以創建具有給定的作者姓名的一篇文章,在article.rb:
def author_list=(raw)
self.authors.clear
raw.split(',').map(&:strip).each_with_index do |e, i|
next if e.blank?
author = Author.find_or_create_by_name(e)
#1
self.authors << author
#2
# AuthorLine.create(:author_id => author.id, :article_id => self.id, :position => i)
end
end
的問題是我不知道什麼時候更新對應AuthorLine
S的position
屬性。如果刪除線#1,並取消對線路#2中,創建AuthorLine可以具有零arctile_id
因爲self.id
可能不給出。