0

我有三个模型:

Class Project < ActiveRecord::Base
  has_many :tasks
  has_many :tags, :through => :tasks
end

Class Tasks < ActiveRecord::Base
  belongs_to :project
  has_and_belongs_to_many :tags
end

Class Tags < ActiveRecord::Base
  has_and_belongs_to_many :tasks
  has_many :projects, :through => :tasks

当我打开控制台时,我可以按预期获得我的项目和任务信息:

Tag.find(1).projects
Tag.find(1).tasks

如果需要,无论标签如何,我都可以获取每个项目的所有任务:

Project.find(1).tasks

无论出于何种原因,如果我通过标签获取项目,我将无法访问任务... something = Tag.find(1).projects something.tasks

...我得到错误:

undefined method `tasks' for #<ActiveRecord::Relation:0x007feae4af0e70>

我已经找了几个小时,找不到任何可以解决这个问题的东西。根据我发现的所有内容,它应该可以工作……但事实并非如此。

我正在使用 Rails 3.2.3。

4

1 回答 1

1

不应该Tag.find(1).tasks给你同样的结果吗?

无论如何,您面临的问题是您试图从Relation对象而不是模型实例中检索关联。Relations可用于链接查询条件,但不能直接从中引用关联。所以,为了让你的例子工作,你需要做

p = Tag.find(1).projects.includes(:tasks)

然后像这样引用任务:p[0].tasks.

但是,我只是确保它Tag.find(1).tasks会生成相同的 SQL 并最终返回相同的tasks.

于 2012-07-23T07:21:14.233 回答