尝试访问“帐单索引”页时出现此错误:
ActiveRecord::StatementInvalid in BillsController#index
PG::UndefinedTable: ERROR: relation "bills" does not exist LINE 5:
WHERE a.attrelid = '"bills"'::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 = '"bills"'::regclass AND a.attnum > 0 AND NOT a.attisdropped
ORDER BY a.attnum
关于如何从Sqlite3切换到Postgres,我遵循了以下指南:
http://www.daveferrara1.com/ruby-in-rails-switch-from-sqlite3-to-postgres/
以下是有关我的应用程序的一些信息:
我有三个模型,财产,帐单和居民我可以访问resident和property的索引页,我可以创建新属性并对其进行编辑,但不能使用bills。
这个问题出现在转换之后在转到博士后之前,一切都很顺利。
我的database.yml就是这样的:
development:
adapter: postgresql
encoding: unicode
database: demo_test_development
pool: 5
username:
password:
timeout: 5000
test:
adapter: postgresql
encoding: unicode
database: demo_test_test
pool: 5
username:
password:
timeout: 5000
production:
adapter: postgresql
encoding: utf8
database: demo_test_production
pool: 5
username:
password:
我的模型:
class Bill < ActiveRecord::Base
belongs_to :property
belongs_to :user
belongs_to :resident
has_many :photos
end
class Property < ActiveRecord::Base
belongs_to :user
has_many :photos
has_one :resident
has_many :bills
validate :address , :city , :country
end
class Resident < ActiveRecord::Base
belongs_to :user
has_many :photos
has_one :property
has_many :bills
validates_presence_of :name
end
这是我的BillsController显示错误:
class BillsController < ApplicationController
before_action :set_bill, only: [:show, :edit, :update]
before_action :authenticate_user!
def index
@bills = current_user.bills
end
def show
@bill = Bill.find(params[:id])
@photos = @bill.photos
end
def new
@bill = current_user.bills.build
end
def create
@bill = current_user.bills.build(bill_params)
if @bill.save
if params[:images]
params[:images].each do |image|
@bill.photos.create(image: image)
end
end
@photos = @bill.photos
redirect_to edit_bill_path(@bill), notice: "Saved"
else
render :new
end
end
def edit
if current_user.id == @bill.user.id
@photos = @bill.photos
else
redirect_to root_path, notice: "You don't have access to this page"
end
end
def update
if @bill.update(bill_params)
if params[:images]
params[:images].each do |image|
@bill.photos.create(image: image)
end
end
redirect_to edit_bill_path(@bill), notice: "Updated"
else
render :edit
end
end
private
def set_bill
@bill = Bill.find(params[:id])
end
def bill_params
params.require(:bill).permit(:due_date, :amount, :bill_type, :bill_status, :description, :property_id, :resident_id)
end
end
最佳答案
表名是“bills”,但您的查询正在查找“bills”。那是不同的名字!