0

レコードはデフォルトのスコープで追加されますが、required では追加されません。

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に挿入しても、デフォルトではそのpublished属性が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 に答える