使用默认范围添加记录,但不是必需的。
class PostsTag
# published is false by default
end
class Post
has_many :posts_tags
{published: true, private: false}.each do |key, val|
has_many "#{key}_tags",
through: "posts_tags",
conditions: ["posts_tags.published = ?", val],
source: :tag
end
end
#--------------------
Post.first.published_tags << Tag.first
Post.first.published_tags.count # = 0
Post.first.private_tags.count # = 1
我错了什么?谢谢你的进步。
答案 0 :(得分:1)
默认情况下,将新标记插入published_tags不会将其已发布属性设置为true。
您需要做的是扩展published_tags关联并覆盖&lt;&lt;在插入时将发布属性设置为true的方法。代码看起来像这样:
has_many :published_tags do
def <<(tag)
tag.published = true
proxy_association.owner.posts_tags+= [tag]
end
end
我已经写完了这个案例here的完整工作示例,你一定要看看它以获得更多的见解。