Не удается получить доступ к модели Mysql в консоли rails

У меня есть существующая удаленная база данных mysql, и я пытаюсь получить к ней доступ из моего приложения rails. У меня есть это в моей разработке database.yml:

 development:
  adapter: mysql2
  encoding: utf8
  database: mydb
  username: myusername
  password: !@#$%@!
  host: IP for my DB
  port: 3306
  pool: 5
  socket: /tmp/mysql.sock  
  timeout: 5000

когда я запускаю следующую команду в моей консоли rails

ActiveRecord::Base.connection.tables

В нем перечислены все доступные таблицы, но когда я пытаюсь получить доступ к модели, возникает следующая ошибка:

City
NameError: uninitialized constant City from (irb):12
    from /home/shreyas/.rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.11/lib/rails/commands/console.rb:47:in `start'
    from /home/shreyas/.rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.11/lib/rails/commands/console.rb:8:in `start'
    from /home/shreyas/.rvm/gems/ruby-1.9.3-p194/gems/railties-3.2.11/lib/rails/commands.rb:41:in `<top (required)>'
    from script/rails:6:in `require'
    from script/rails:6:in `<main>'

Любые предложения, что я делаю неправильно? Я хочу получить доступ к удаленной базе данных в своем приложении. На данный момент я не создал никаких моделей. Нужно ли создавать все модели? Я вижу полную структуру базы данных в моем файле schema.rb.


person Arihant Godha    schedule 26.06.2013    source источник
comment
Это не похоже на ошибку mysql, покажите свои модели   -  person ahmet    schedule 26.06.2013
comment
Это не ошибка mysql, когда я пытаюсь получить доступ к таблицам моей БД. Like City - это имя таблицы, поэтому, когда я пытаюсь получить доступ к city.first или чему-либо еще, он показывает мне вышеуказанную ошибку.   -  person Arihant Godha    schedule 26.06.2013
comment
Могу ли я увидеть вашу модель города   -  person ahmet    schedule 26.06.2013
comment
Это удаленная база данных. Я не создал его.   -  person Arihant Godha    schedule 26.06.2013
comment
было бы лучше, если бы вы могли поделиться своей моделью города (app/models/city.rb)   -  person Bachan Smruty    schedule 26.06.2013
comment
Неважно, где хранится база данных, вам нужна модель.   -  person ahmet    schedule 26.06.2013
comment
Я вижу это в моем schema.rb create_table city, :force =› true do |t| имя t.string, :limit => 100, :null =› false t.string abbr_name, :limit => 100, :null =› false проверка t.integer, :null =› false end   -  person Arihant Godha    schedule 26.06.2013
comment
@BachanSmruty Я не создал моделей? Нужно ли мне его создавать, и если да, то как мне это сделать? У меня есть структура таблицы в моем файле schema.rb.   -  person Arihant Godha    schedule 26.06.2013
comment
Для этого в консоли вы можете написать код типа rails g model City, он создаст для вас модель City. Как вы сказали, у вас есть существующая таблица, поэтому вам не нужна миграция, созданная с помощью приведенного выше синтаксиса. Поэтому вам следует удалить сгенерированную миграцию из db/migrate.   -  person Bachan Smruty    schedule 26.06.2013
comment
Я создал одну модель под названием город, но все еще не добился успеха. Итак, мое определение проблемы: у меня есть существующая база данных, и я хочу получить к ней доступ в своем приложении. Как это сделать ?   -  person Arihant Godha    schedule 26.06.2013


Ответы (3)


Для этого в консоли вы можете написать код, например

rails g model City

он создаст для вас модель города. Как вы сказали, у вас есть существующая таблица, поэтому вам не нужна миграция, созданная с помощью приведенного выше синтаксиса. Поэтому вам следует удалить сгенерированную миграцию из db/migrate.

ИЛИ еще вы можете сделать одну вещь, просто добавив файл city.rb в app/models. Затем добавьте код

class City < ActiveRecord::Base
   # if your table name is cities, then you don't need to do any thing.
   # if your table name is something else rather than cities then place the following commented code
   # self.table_name = 'your_existing_city_table_name'

   # then you have to add columns of the table as attr_accessible. for e.g. you have name, state_id in there
   attr_accessible :name, :state_id
end

Надеюсь, это сработает для вас :)

person Bachan Smruty    schedule 26.06.2013
comment
@BachanSmuthy Я следовал инструкциям: имя таблицы в моей базе данных - это город (маленький регистр), но когда я пытаюсь получить доступ к городу, он говорит, что город (таблица не существует), и если я использую город, это дает мне ту же ошибку . :( - person Arihant Godha; 26.06.2013
comment
Вы добавили self.table_name = 'city' в модель City? - person Bachan Smruty; 26.06.2013
comment
Вы можете проголосовать за вопрос, если не возражаете;) и у меня есть еще один вопрос в моей очереди, если вы можете помочь stackoverflow.com/questions/17185439/huge-json-object-to-excel - person Arihant Godha; 26.06.2013
comment
Какая же я дура, как я могу забыть это. Спасибо дружище спасибо за помощь. - person Arihant Godha; 26.06.2013

Конечно, вы можете получить доступ к своим данным внутри своей базы данных mysql, но для того, чтобы использовать ее в качестве представления объекта, вам необходимо создать model, связанный с вашими данными.

class City < ActiveRecord::Base
end

Таким образом, ActiveRecord сделает за вас тяжелую работу, чтобы «связать» ваш объект с данными в вашей базе данных (при условии, что имя модели правильное, здесь у вас должна быть таблица с именем cities).

Затем вы сможете получать города из консоли rails.

City.all

Дополнительную информацию об ActiveRecord см. на странице http://guides.rubyonrails.org/active_record_querying.html

person Pierre-Louis Gottfrois    schedule 26.06.2013
comment
Итак, как я могу добавить существующие модели в свое приложение. У меня нет миграций, но я вижу всю структуру таблицы в моем файле schema.rb. И по ошибке я уже очистил базу данных, запустив rake db:schema:load - person Arihant Godha; 26.06.2013
comment
не уверен, что понял. Если ваша база данных уже заполнена данными, просто добавьте классы ruby ​​(создайте файлы и вставьте код), как я показал выше, чтобы иметь доступ к вашим данным через ruby ​​и активную запись. Однако отсутствие миграции, вероятно, в какой-то момент станет для вас проблемой. Например, при отправке кода на рабочий сервер... - person Pierre-Louis Gottfrois; 26.06.2013

Если кто-то столкнется с этим, обязательно проверьте свои модели. Я создал их вручную и забыл разрешить Active Record знать о моих моделях.

Я имел:

class Currency
  ...
end

вам нужно изменить это, чтобы показать

class Currency < ApplicationRecord
  ...
end

Может сэкономить вам часы отладки :)

person NemyaNation    schedule 06.05.2020