Если ваши ассоциации определены с помощью has_many, вам не нужно использовать find таким образом
Вы просто найдете тренера:
@trainer = Trainer.find_by_id(params[id])
, а затем сможете получить доступ ко всем его событиям.с
@trainer.events
Чтобы это работало, вам нужно в вашей модели тренера:
has_many :events
в вашей модели события:
belongs_to :trainer
и столбец trainer_id втаблица событий
edit
Называть столбец foreign_key «trainer» - плохая идея, она нарушает соглашения Rails и усложняет вашу жизнь.Вы можете указать Rails, какое имя столбца использовать следующим образом:
has_many :events, :foreign_key => :trainer
и
belongs_to :trainer, :foreign_key => :trainer
, но вам следует избегать этого, если это возможно, и вместо этого изменить миграцию и перестроить базу данных.Предполагается, что эта функция в основном позволяет использовать базы данных из старых проектов, не написанных на Rails.
Кроме того, другие ошибки говорят вам, что в params [: id] нет значения.У вас есть данные о приборах в базе данных?
Чтобы увидеть, работает ли он вообще, вы можете начать с
@trainer = Trainer.first
. Для этого потребуется первый тренер, а затем
*.1035 *
должно работать, если какие-либо события для этого тренера существуют.Затем вы можете узнать, что не так с params [: id], скорее всего, какая-то ссылка не работает должным образом, возможно, ваша форма неверна или в маршрутизации к вашему контроллеру есть ошибки.
Вы пытаетесь слишком много вещейсразу, не убедившись, что основы работают.Именно поэтому мы обычно проводим тестовую разработку в Ruby on Rails.
Сначала настройте модель Trainer.Затем протестируйте его, убедитесь, что есть тренеры, которые пишут и загружают осветители, и что Rails может их найти.
После этого добавьте модель событий (и снова некоторые данные об осветителях).Если вы явно не пишете тесты, то по крайней мере используйте консоль Rails (я думаю, что это был командный скрипт / консоль в Rails 2.x) для тестирования.Только если вы на 100% уверены, что это работает на уровне модели, начинайте писать контроллеры.Таким образом, вы должны обрабатывать только одну ошибку в любой данный момент.