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现在我正在尝试写一个非常简单的东西 - 在and之间添加一个关系collection

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

这段代码给了我以下错误:

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

我不知道为什么没有posts方法,因为我有很多以完全相同的方式定义的其他关系并且它们运行良好,尽管它们不是 HABTM。

你能告诉我我的代码有什么问题吗?

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 回答