2010-07-16 1 views
0

У меня возникают проблемы с искателями на основе динамических атрибутов в рельсах. Они, кажется, не выходят за мою модель.Rails find_by макросы с отношением has_many

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?

ответ

0

То, что вы пытаетесь сделать, это получить команду, когда вы знаете человека.

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

# or in one line 
team = Person.find(1).team 
1

Если вы хотите, чтобы найти конкретный человек среди людей, принадлежащих к определенной команде, вы дали бы:

@some_team.people.find_by_id(1) 

Person.find_all_by_team_id работает, потому что team_id столбец в таблице People.

Team.find_by_person_id (1) не работает, потому что:

1) Команда является классом, а не экземпляр этого класса, что означает, что он не имеет метод людей, и именно поэтому вам получить no_method_error и

2) Даже если правильно получить часть экземпляра (например, @ some_team.people.find_by_person_id), у Человека нет столбца person_id, но вместо этого он имеет столбец идентификатора. Вот почему я упомянул @ some_team.people.find_by_id выше.

+0

Это также возвращается: NoMethodError: неопределенный метод 'люди» – SooDesuNe

+0

Ну, я просто попытался, что на проект свежего рельсов, и она работает. Должна быть какая-то другая проблема, которая вызывает ошибку. Не могли бы вы точно описать, что вы вводите, начиная с терминала, пока не получите ошибку? – Petros

+0

RAILS_ROOT/script/console Затем скопируйте и вставьте свое решение. рельсов v2.3.8 ">> Человек #" показывает "team_id" Если удалить has_many: люди, я получаю ошибку: ArgumentError: нет ассоциации не найдена для имени 'людей. Он еще не определен? Я здесь невежественный. – SooDesuNe