我正在尝试在我的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>
我不知道为什么没有posts
方法,因为我有很多其他关系以完全相同的方式定义并且它们运行良好,尽管它们不是HABTM。
你能告诉我我的代码有什么问题吗?
答案 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
请注意,可能有更好的方法可以做到这一点,但它比您最初所做的更短并且应该修复原始错误