0

记录是使用默认范围添加的,但不是必需的。

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

我做错了什么?感谢提前。

4

1 回答 1

1

默认情况下,将新标签插入到 published_tags 中不会将其发布属性设置为 true。

您需要做的是扩展published_tags 关联并覆盖它的<< 方法以在插入时将published 属性设置为true。代码看起来像这样:

has_many :published_tags do
  def <<(tag)
    tag.published = true
    proxy_association.owner.posts_tags+= [tag]
  end
end

我在这里写了一个关于这个案例的完整工作示例,你绝对应该看看它以获得更多的见解。

于 2012-09-01T10:40:18.977 回答