自分のページにアクセスしようとすると、次のエラーが表示されます
ActiveRecord::StatementInvalid (Mysql2::エラー: テーブル 'p478r679_partybot.secretsanta' は存在しません: 'secretsanta' からフィールドを表示): app/controllers/secretsantas_controller.rb:7:'index' 内
しかし、このテーブルは私のDBに存在します。
私の問題の背景を説明するために、私はこのアプリケーションを数年前に作成しましたが、最近まで問題なく動作していました。Thin Server でアプリケーションを起動しようとすると、次のエラーが発生しました。
すでにラック 1.4.3 を有効にしていますが、Gemfile にはラック 1.2.1 が必要です。bundle exec を使用すると、これを解決できる場合があります。(宝石::ロードエラー)
そこで、ホスティング サービスの技術サポートに支援を求めました。彼らは言った、
「問題は、レールのバージョンがバンドラーのバージョンと互換性がないことでした。これで、レールのバージョンが「3.1.10」に変更され、バンドラー「1.2.3」がインストールされました。これで、Web サイトが正常に読み込まれます。サーバーで「シン」サービスが開始されます。ポートはアプリケーションをリッスンしています。以下の詳細を参照してください。」
そして、彼らはそれを機能させるために私の宝石をすべて更新しました。私はもともと Rails 3.0.1 と thin 1.2.7 を使用していました。現在、Rails 3.1.10 と Thin 1.5.1 を使用しています。これで、アプリケーションが読み込まれ、Secretsanta を除くすべての機能が動作します。
エラー メッセージの次の部分「SHOW FIELDS FROM secretsanta」をよく見ると、テーブル名が「secretsanta」であることがわかりますが、「secretsanta s」である必要がありますか?
アプリケーションが過去 3 年間正常に動作していたにもかかわらず、gem を更新した後に動作しない理由がわかりません。
Secretsanta モデル User モデルと SecretsantasController のコード スニップを次に示します。
Secretsanta.rb
class Secretsanta < ActiveRecord::Base
belongs_to :user
belongs_to :gift_receiver, :class_name => "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
必要な場合と追加情報をお知らせください。事前にご協力いただきありがとうございます