【发布时间】:2013-01-09 09:44:44
【问题描述】:
我正在尝试在我的 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。
你能告诉我我的代码有什么问题吗?
【问题讨论】:
-
首先我猜你的
CollectionsPosts在这里没有用,使用has_many through关联时必须要有“加入模型”。您的数据库中是否有所需的表,即collections_posts? -
我添加它只是为了检查它是否会改变任何东西,但它不会。无论如何-无论是否有
CollectionsPosts模型,我都会收到此错误;)是的,我确实有这张桌子 -
很奇怪,您收到
ActiveRecord::Relation的错误,我认为这意味着collection是一个关系。find的结果应该是实际记录,而不是关系。你确定你没有做任何这里没有显示的事情吗? -
这里是整个方法(
User.collect_post()。它在User模型和Collection属于_toUser)但我找不到任何问题:gist.github.com/4492062 -
那是你的问题。我会发布一个答案。
标签: ruby-on-rails ruby-on-rails-3 rails-activerecord