0

RailsのDynamic属性ベースのファインダーに問題があります。彼らは私のモデルのために終了していないようです。

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)

team_idはPeopleテーブルの列であるため、Person.find_all_by_team_idは機能します。

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 に答える