0

Railsアプリで簡単なブックマーク機能を作成しようとしています。

これが私のモデルです:

# post.rb
class Post < ActiveRecord::Base
  has_and_belongs_to_many :collections
end

# collection.rb
class Collection < ActiveRecord::Base
  has_and_belongs_to_many :posts
end

# collections_posts.rb
class CollectionsPosts < ActiveRecord::Base
end

今、私は本当に単純なことを書こうとしています-との間に関係を追加しpostますcollection

post = Post.find(1)
collection = Collection.find(1)
collection.posts << collection

このコードは私に次のエラーを与えます:

undefined method `posts' for #<ActiveRecord::Relation:0x00000100c81da0>

postsHABTMではありませんが、まったく同じ方法で定義された他の関係がたくさんあり、それらがうまく機能するため、なぜ方法がないのかわかりません。

私のコードの何が問題になっているのか教えていただけますか?

4

1 に答える 1

2

私はあなたが本当にあなたのcollect_postメソッドをもっと簡単にすることができると思います、そのようなものはうまくいくはずです:

def collect_post(post, collection_title = 'Favourites')

  # Find a collection by its name
  collection = Collection.find_by_name(title: collection_title) # this will return a collection object and not an ActiveRecord::Relation

  # if there is no such collection, create one!
  if collection.blank?
    collection = Collection.create user: self, title: collection_title
  end

  collection.posts << post

end

それを行うためのより良い方法があるかもしれないことに注意してください、しかしそれはあなたが最初にしたことよりも短く、あなたの元のエラーを修正するはずです

于 2013-01-09T10:16:01.980 に答える