Получение ActiveRecord :: StatementInvalid: не удалось найти таблицу после переименования модели - PullRequest
2 голосов
/ 24 июня 2011

Я ранее назвал мою модель неверной как "Компании". Вместо того, чтобы переименовать его, я переименовал все ссылки, удалил базу данных и воссоздал все заново, перезапустив миграцию. Я могу видеть таблицу, воссозданную как "Company" из проводника SQLite, но когда я запускаю Company.new через irb, я получаю:

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? Любая помощь будет великолепна.

1 Ответ

3 голосов
/ 24 июня 2011

Название таблицы ActiveRecord ищет модель компании. Rails использует перегибы для множественного числа имени модели, чтобы сформировать имя таблицы для запроса в базе данных. Если вы хотите переименовать таблицу или работать с устаревшей базой данных, вы можете использовать set_table_name в вашей модели, чтобы установить имя таблицы.

ОБНОВЛЕНИЕ: В the rails wiki .

есть и другие полезные советы.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...