所以,如果你有两个型号,那么就说Post和Tag,你想要一个'主'标签,以及许多'二级'标签,都来自Tag模型......这可能吗?我可以想象连接 - 你需要Post Model中的主标签ID列和Secondary标签的连接表......但是在Rails中有没有简单的方法呢?
谢谢!
答案 0 :(得分:3)
在您的情况下,您需要一个联接表post_tags
。此表具有主列,用于指示它是否为主标记。模型应如下所示:
class PostTag
belongs_to :tags
belongs_to :posts
# it has primary with type is boolean
end
class Post
has_many :post_tags
has_one :primary_tag, -> { where("post_tags.primary": true) }, through: :post_tags, class_name: "Tag"
has_many :secondary_tags, -> { where("post_tags.primary": false) }, through: :post_tags, class_name: "Tag"
end
class Tag
has_many :post_tags
has_many :posts, through: :post_tags
end
答案 1 :(得分:1)
这是我能想到的唯一方法,这很容易,has_many, through:
是可选的,具体取决于你的需要。
class Post < ApplicationRecord
has_one :tag
has_many :secondary_tags
has_many :tags, through: :secondary_tags
end
class Tag < ApplicationRecord
belongs_to :post
has_many :secondary_tags
has_many :posts, through: :secondary_tags
end
class SecondaryTags < ApplicationRecord
belongs_to :post
belongs_to :tag
end
像这样创建联合表:
class CreateSecondaryTags < ActiveRecord::Migration[5.0]
def change
create_table :secondary_tags do |t|
t.integer :post_id
t.integer :tag_id
t.timestamps
end
add_index :secondary_tags, :post_id
add_index :workout_categories, :tag_id
end
end