Запрос MySQL через ошибку ActiveRecord

#mysql #ruby-on-rails #ruby

#mysql #ruby-on-rails #ruby

Вопрос:

Я новичок в RoR. Я пытаюсь проверить, правильно ли настроено мое соединение с MySQL. У меня есть этот код в моем контроллере:

 require 'rubygems' # Only if installed via RubyGems

class HomeController < ApplicationController
  User.find(1)

  def index
  end
end
  

и это в моем классе user.rb:

 class User < ActiveRecord::Base
end
  

И, очевидно, у меня есть таблица пользователей в MySQL.

Я получаю ошибку, подобную этой:

 undefined method `eq' for nil:NilClass
  

Есть идеи, почему? А также, как я могу извлечь код запроса из контроллера в файл типа модели?

Комментарии:

1. Почему вы хотите переместить find вызов в модель? find уже есть метод, определенный в модели.

2. Не могли бы вы включить первые несколько строк обратной трассировки, которые вызвали эту ошибку?

Ответ №1:

Я думаю, что ваш код должен выглядеть примерно так:

 class HomeController < ApplicationController
  def index
    @user = User.find(1)
  end
end
  

И вы должны запрашивать свою модель в controller — ofc при использовании базовых находок и т.д.

В более сложных случаях вам следует использовать области видимости: http://asciicasts.com/episodes/202-active-record-queries-in-rails-3

Комментарии:

1. вы уверены, что ваша таблица существует, и у вас есть там запись с id = 1?

2. кроме того, если бы записи с этим идентификатором там не было, она, вероятно, вернула бы другую ошибку, верно?

3. На самом деле, когда я перезапустил сервер, я получил эту ошибку: !!! Отсутствует драгоценный камень mysql2. Добавьте это в свой Gemfile: gem ‘mysql2’ — в чем разница с mysql и mysql2 gems? Действительно ли я должен добавить драгоценный камень mysql2? Или ошибка странная?

Ответ №2:

Вам нужно переместить User.find(1) в index действие.

Комментарии:

1. сделал это, но все еще имеет неопределенный метод `eq’ для ошибки nil: NilClass

2. @@thefugal не повезло ни с одним из решений