#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 не повезло ни с одним из решений