通过has_many和默认范围添加记录

时间:2012-09-01 10:30:18

标签: ruby-on-rails has-many-through has-many

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

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

我错了什么?谢谢你的进步。

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的完整工作示例,你一定要看看它以获得更多的见解。