извлечь данные из базы данных в рельсах? - PullRequest
2 голосов
/ 24 августа 2011

У меня есть две таблицы, называемые событиями и тренерами, в моей таблице project.events содержат идентификатор тренера. У меня есть выпадающее меню, которое содержит имя тренера следующим образом.

<% form_tag "/events/find_trainer" do %>
<%= collection_select("event", "trainer", @trainers , :id, :name, {:prompt => true}) %>
<%= submit_tag "search" %>
<%end%>

Затем я создал метод find_trainer в контроллере для извлечения данных из таблицы событий.

def find_trainer
@events=Event.find(:all, :conditions=> { :trainer=>params[:id]})
  end

Это ничего не получит из базы данных. Я использую версии postgresql и ruby ​​1.8.7 и rails 2.3.8. Я не мог понять свою ошибку .. Кто-нибудь может мне помочь?

Ответы [ 3 ]

4 голосов
/ 24 августа 2011

Если ваши ассоциации определены с помощью 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% уверены, что это работает на уровне модели, начинайте писать контроллеры.Таким образом, вы должны обрабатывать только одну ошибку в любой данный момент.

0 голосов
/ 24 августа 2011

Параметрами этого метода записи будут params [: event] [: trainer], в которых будет указано значение id.

, а также значение столбца foreign_key необходимо проверить.

0 голосов
/ 24 августа 2011

Внешние ключи обычно называют в честь таблицы, на которую они указывают.

Попробуйте это?

@events = Event.find(:all, :conditions => {:trainer_id => params[:id]})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...