Reputation: 2044
I've read a lot of potsts like this, but all the solutions I've seen are in the nomenclature of the models, naming and Rails convention.
Now I have this problem when I run for first time in production environment in PostgreSQL 9.1
rake db:migrate RAILS_ENV=production
or
rake db:schema:load RAILS_ENV=production
I could create database without problems: rake db:create RAILS_ENV=production
=>OK
The error is
rake aborted!
PG::UndefinedTable: ERROR: relation "categories" does not exist
LINE 5: WHERE a.attrelid = '"categories"'::regclass
^
: SELECT a.attname, format_type(a.atttypid, a.atttypmod),
pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod
FROM pg_attribute a LEFT JOIN pg_attrdef d
ON a.attrelid = d.adrelid AND a.attnum = d.adnum
WHERE a.attrelid = '"categories"'::regclass
AND a.attnum > 0 AND NOT a.attisdropped
ORDER BY a.attnum
And the models follows all Rails naming convention. So that, I don't know what this error is telling me ¿There is something else that can cause this error?
The models:
class Category < ActiveRecord::Base
has_many :subcategories
end
class Subcategory < ActiveRecord::Base
belongs_to :category
end
shema.rb:
ActiveRecord::Schema.define(version: nnnn) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
create_table "categories", force: true do |t|
t.string "name"
t.text "comments"
t.datetime "created_at"
t.datetime "updated_at"
t.decimal "amount_need_comments", precision: 6, scale: 2
t.decimal "amount", precision: 6, scale: 2
t.decimal "amount_per_unit", precision: 6, scale: 2
t.integer "teletrabajo", limit: 2, default: 0, null: false
t.decimal "amount_need_city", precision: 6, scale: 2
end
create_table "subcategories", force: true do |t|
t.string "name"
t.text "comments"
t.integer "category_id"
t.datetime "created_at"
t.datetime "updated_at"
t.decimal "amount_need_comments", precision: 6, scale: 2
t.decimal "amount", precision: 6, scale: 2
t.decimal "amount_per_unit", precision: 6, scale: 2
t.decimal "amount_need_city", precision: 6, scale: 2
end
And finally, I tried something like this, without success
inflections.rb
ActiveSupport::Inflector.inflections do |inflect|
inflect.irregular 'category', 'categories'
inflect.irregular 'subcategory', 'subcategories'
inflect.plural 'category', 'categories'
inflect.plural 'subcategory', 'subcategories'
end
And remove the relationship of the models involved, like this:
class ExpenseDetail < ActiveRecord::Base
# belongs_to :expense
# belongs_to :category
# belongs_to :subcategory
default_scope :order=>"id"
validate :expense_date...
...
Upvotes: 12
Views: 20411
Reputation: 11
I had the same issue, I realised that migrations should be sequential. For example, if you want likes to reference post, then you start by migrating post then likes. That was, you cant have issues. If you already have the migrations, do it manually by swapping the content of the files.
Upvotes: 0
Reputation: 2044
I ran into my own error again !!, when executing rake test
, but in this case thanks to cedricdlb I've found here the solution, quite simply:
rake db:test:prepare
rake db:test:load
Upvotes: 3
Reputation: 3297
I have the same problem and I found that in my migrations I don't have table names in plural form:
For example:
class CreatePosts ActiveRecord::Migration
def change
create_table :posts do |t|
t.string :source
t.string :destination
t.datetime :time
t.timestamps
end
end
end
I have create_table :post
, but when I change it to create_table :posts
.
It start working!!!!
Upvotes: 8