2013-11-12 3 views
8

Я получаю следующее сообщение об ошибке при попытке получить доступ к одной из моих страницПолучение Таблица не существует ошибка, но таблица существует (ActiveRecord :: StatementInvalid mysql2 :: Ошибка: Таблица не существует)

ActiveRecord::StatementInvalid (Mysql2::Error: Table 'p478r679_partybot.secretsanta' doesn't exist: SHOW FIELDS FROM 'secretsanta'): app/controllers/secretsantas_controller.rb:7:in `index'

Но эта таблица существует в моей БД.

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

You have already activated rack 1.4.3, but your Gemfile requires rack 1.2.1. Using bundle exec may solve this. (Gem::LoadError)

Так я приблизился к техподдержку моего хостинга для помощи. Они сказали:

“The problem was that the rails version was not compatible with the bundler version. Now we have changed the rails version to "3.1.10" and have installed the bundler "1.2.3 ". Now your website is loading fine.The "thin" service is started in your server. The port is listening to the application. Refer the details given below.”

И они обновили все мои драгоценные камни, чтобы заставить его работать. Первоначально я использовал Rails 3.0.1 и тонкий 1.2.7. Теперь у меня есть Rails 3.1.10 и тонкий 1.5.1. Теперь приложение загружается, и все функции работают, кроме Secretsanta.

Когда я смотрю на следующую часть сообщения об ошибке, «SHOW FIELDS FROM secretsanta» Я вижу, что имя таблицы «secretsanta», должно ли оно быть «secretsanta s»?

Я не уверен, что сделать это, в конце концов приложение работает отлично в течение последних 3-х лет, и я не знаю, почему он не работает после обновления драгоценных камней

Вот некоторый код надрез в тайный санта модель User Model и SecretsantasController.

Secretsanta.rb

class Secretsanta < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :gift_receiver, :class_name => "User" 
    ... 

User.rb

class User < ActiveRecord::Base 

     # Setup accessible (or protected) attributes for your model 
     attr_accessible :first_name, :last_name, :email, 
         :password, :password_confirmation, :remember_me 

     validates :first_name, :presence => true 
     validates :last_name, :presence => true 
     validate :should_be_invited 

     # Include default devise modules. Others available are: 
     # :token_authenticatable, :confirmable, :lockable and :timeoutable 
     devise :database_authenticatable, :registerable, 
      :recoverable, :rememberable, :trackable, :validatable 

     has_one :potluck 

     has_one :secretsanta 
     has_one :gift_receiver, :through => :secretsanta 

     has_many :secretsantaExclutions 
     has_many :excluded, :through => :secretsantaExclutions 

     has_many :discussions 
     has_many :comments 
     ... 

secretsantas_controller.rb

class SecretsantasController < ApplicationController 
     before_filter :authenticate_user! 
     def index 
     @exclutionList = SecretsantaExclution.find_all_by_user_id(current_user.id) 
     @event = Event.find_by_id(4) 
     @rsvp = GuestList.find_by_guest(current_user.email) 
     @secretsanta = Secretsanta.find_by_user_id(current_user.id) #i am getting the error at this line 

     end 

Пожалуйста, дайте мне знать, если вам нужно, и дополнительную информацию. Заранее благодарю за вашу помощь

ответ

14

Я считаю, что вы были правы в своем подозрении относительно имени таблицы секреты.

Если вы не указали имя таблицы на своей модели secretsanta, рельсы будут искать таблицу с именем secretsantas. Если приложение работало раньше, я бы предположил, что таблица фактически называется secretsantas.

Чтобы получить список доступных таблиц, выполните команду:

tables = ActiveRecord::Base.connection.tables 

Ах, вот в чем проблема:

'Secretsanta'.pluralize 
=> "Secretsanta" 

Попробуйте указать имя таблицы в вашей модели:

class Secretsanta < ActiveRecord::Base 
    self.table_name = "secretsantas" 
end 
+0

да, имя таблицы в БД «secretsantas» – Ruper

+0

Спасибо, Натан Хайд, он работает после установки имени таблицы, как вы предложили. Любая догадка о том, как она работает до обновления версии gem? я люблю это знать – Ruper

Смежные вопросы