2011-06-24 5 views
2

以前私のモデルの名前を "Companies"と誤っていました。名前を変更する代わりに、すべての参照の名前を変更し、データベースを削除し、移行を再実行してすべてを再作成しました。私は、テーブルにはSQLiteのエクスプローラから「会社」として再作成を参照することができるよ私はIRBによるCompany.newを実行したときに、私が取得:ActiveRecord :: StatementInvalidの取得:モデルの名前を変更した後でテーブルを見つけることができませんでした。

ActiveRecord::StatementInvalid: Could not find table 'companies' 
from /Users/emzy/rails/blah/.bundle/ruby/1.9.1/gems/activerecord-3.0.7/lib/active_record/connection_adapters/sqlite_adapter.rb:295:in `table_structure' 
from /Users/emzy/rails/blah/.bundle/ruby/1.9.1/gems/activerecord-3.0.7/lib/active_record/connection_adapters/sqlite_adapter.rb:186:in `columns' 
from /Users/emzy/rails/blah/.bundle/ruby/1.9.1/gems/activerecord-3.0.7/lib/active_record/base.rb:680:in `columns' 
from /Users/emzy/rails/blah/.bundle/ruby/1.9.1/gems/activerecord-3.0.7/lib/active_record/persistence.rb:284:in `attributes_from_column_definition' 
from /Users/emzy/rails/blah/.bundle/ruby/1.9.1/gems/activerecord-3.0.7/lib/active_record/locking/optimistic.rb:62:in `attributes_from_column_definition' 
from /Users/emzy/rails/blah/.bundle/ruby/1.9.1/gems/activerecord-3.0.7/lib/active_record/base.rb:1395:in `initialize' 
from (irb):1:in `new' 
from (irb):1 
from /Users/emzy/rails/blah/.bundle/ruby/1.9.1/gems/railties-3.0.7/lib/rails/commands/console.rb:44:in `start' 
from /Users/emzy/rails/blah/.bundle/ruby/1.9.1/gems/railties-3.0.7/lib/rails/commands/console.rb:8:in `start' 
from /Users/emzy/rails/blah/.bundle/ruby/1.9.1/gems/railties-3.0.7/lib/rails/commands.rb:23:in `<top (required)>' 
from script/rails:6:in `require' 
from script/rails:6:in `<main>' 

私は「企業のための参照がどこにあるかわからないんだけどから来て - 私はプロジェクトのディレクトリ内の参照を見つけることができません。すべてのymlsなどが正常に見えます。

コントローラー:

class CompanyDirectoryController < ApplicationController 
    before_filter :require_admin, :only => [:new, :create, :edit] 
    def new 
    @company = Company.new 
    @company.companylinks.build 
    end 

モデル:

class Company < ActiveRecord::Base 
    validates_presence_of :fullname, :detailed_description, :product_info, :cat_tags, :email 
    validates_uniqueness_of :fullname 
    has_many :companylinks, :class_name => 'CompanyLinks', 
          :foreign_key => "pid", 
          :dependent => :destroy 
    has_attached_file :company_photo, 
        :styles => { :medium => "300x300>", 
           :thumb => "100x100>" } 
    attr_accessor :photo_file_name 
    attr_accessor :photo_content_type 
    attr_accessor :photo_file_size 
    attr_accessor :photo_updated_at 

    accepts_nested_attributes_for :companylinks, 
           :allow_destroy => true 
end 

ルート: resources :company, :controller => :company_directory

なぜそれはまだcompaniesの代わりCompanyを探していますか?どんな助けも素晴らしいだろう。

答えて

3

ActiveRecordのテーブル名は、会社が会社のモデルを検索しています。 Railsは、データベースの中で照会するテーブルの名前を形成するために、モデルの名前を複数形にするために変奏を使用します。テーブルの名前を変更する場合や、レガシーデータベースを操作する必要がある場合は、モデルのset_table_nameを使用してテーブル名を設定できます。

更新:the rails wikiに他にも役立つヒントがあります。

+0

ありがとうございます。私はテーブル名がモデルのように特異でなければならないと考えていました。 –

+0

Pragmatic ProgrammersのRailsを使用したAgile Web Developmentのコピーを入手できれば、キー・レールの概念と優れたソフトウェア設計の原則を把握するのは良い読書です。 – Chandranshu

関連する問題