HABTM - 未定义的方法

时间:2013-01-09 09:44:44

标签: ruby-on-rails ruby-on-rails-3 rails-activerecord

我正在尝试在我的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

现在我正在尝试写一个非常简单的事情 - 在postcollection之间添加关系:

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

此代码给出了以下错误:

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

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

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

1 个答案:

答案 0 :(得分: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

请注意,可能有更好的方法可以做到这一点,但它比您最初所做的更短并且应该修复原始错误