0

我在使用 Rails 中基于动态属性的查找器时遇到问题。他们似乎没有退出我的模型。

class Person < ActiveRecord::Base
  belongs_to :team
end

class Team < ActiveRecord::Base
  has_many :people
end

因此,在脚本/控制台中,要找到 ID 为 1 的团队,我应该能够:

>> Team.find_by_person_id(1)

我得到错误:

NoMethodError: undefined method `find_by_person_id'

这真的很奇怪,因为在相反的方向搜索,即:

>>Person.find_all_by_team_id(1)

将成功找到团队 1 中的所有人。

需要做什么才能找到团队person_id

4

2 回答 2

1

如果你想在属于某个团队的人中找到一个特定的人,你会给出:

@some_team.people.find_by_id(1)

Person.find_all_by_team_id 有效,因为 team_id 是 People 表中的一列。

Team.find_by_person_id(1) 不起作用,因为:

1) Team 是类而不是该类的实例,这意味着它没有 people 方法,这就是你得到 no_method_error 的原因,并且

2)即使正确获取实例部分(即@some_team.people.find_by_person_id),Person 也没有 person_id 列,但它有一个 id 列。这就是我在上面提到@some_team.people.find_by_id 的原因。

于 2010-07-16T02:47:29.777 回答
0

你要做的是在你认识这个人的时候组建一个团队。

person = Person.find(1)
team = person.team

# or in one line
team = Person.find(1).team
于 2010-07-16T07:11:22.077 回答