2011-06-24 77 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的敏捷Web开发副本,那么掌握关键轨概念以及一些优秀的软件设计原则将会是一次不错的阅读。 – Chandranshu