Rails 关于多对多关系

suchiva · 2016年11月23日 · 最后由 suchiva 回复于 2016年11月25日 · 3492 次阅读

我有三个表:一个 book 表,一个 tag 表,一个保存二者关系的表; 新增 book 记录,会新增 tag,保存二者关系的那个表如何做到和 java web 一样会自动新增记录保存二者关系, 在线等,谢谢指点~

#1 楼 @blacktulip 表我晓得,现在是页面操作,在生成的时候,第三个关系表是如何操作的,java 好像不用操作关系表~

手机上没法打完整代码示例,不用操作表,就 tags.each { |tag| book.tags < tag unless book.tags.include? tag } 这样子

#3 楼 @blacktulip 那等你有空的话帮看一下吧,我自己也再看一下 API,谢谢呢

class Book < ActiveRecord::Base
  has_many :book_tags
  has_many :tags, through: :book_tags
end

class Tag < ActiveRecord::Base
  has_many :book_tags
  has_many :books, through: :book_tags
end

class BookTag < ActiveRecord::Base
  belongs_to :tag
  belongs_to :book
end

book = Book.create
tag = Tag.create
book.tags << tag || tag.books << book

标签可以和多个 model 关联,比如音乐也可以用上标签,我觉得可以考虑用上多态,并且建立一张中间表,比如 taggings,对于 taggings 这张表可以使用多态,当说明 tags 和 books 或者 music 关系时候,用 source_type 加以区分,比如 has_many :books, :through => :taggings, :source => :taggable, :source_type => "Book"

#5 楼 @angelfan 我用的也是类似的,多谢指教!

#6 楼 @yaocanwei 这个我可能还没用到,希望以后用到,多谢指点!

需要 登录 后方可回复, 如果你还没有账号请 注册新账号