我有两个 model 分别叫 post, page,然后有个 concerns 叫 taggable
tags
表
t.string :name
taggings
表
t.integer :taggable_id
t.string :taggable_type
t.integer :tag_id
concerns/taggable.rb
module Taggable
extend ActiveSupport::Concern
included do
has_many :taggings, as: :taggable
has_many :tags, through: :taggings
scope :tagged, ->(tagname) { select { |p| p.tag_list.include? tagname } }
end
def tag_list
tags.collect(&:name)
end
end
然后分别在 post.rb
page.rb
中 include Taggable
tag.rb
has_many :taggings
最后是连接表 tagging.rb
belongs_to :tag
belongs_to :taggable, polymorphic: true
Post.first.tags
和 Page.first.tags
都能实现功能,但是我用 Tag.first.taggable_id
和 Tag.first.taggable_type
却不能逆向访问,请问这是怎么回事?需要怎么修改?Post.tagged('gentoo')
的结果是个 Array(毫无疑问),因此之后就无法继续使用 where
等查询语句了,怎么修改上面那个 tagged
的 scope
?