我试图将现有的PostgreSQL视图(创建脚本在另一台计算机上运行和测试)映射到Rails应用程序,但我一直得到PG::UndefinedTable: ERROR: relation "reports_consultants_clients_tasks" does not exist
。
首先,这是我的路线文件:
Rails.application.routes.draw do
namespace :reports do
get 'consultants_clients_tasks/index'
end
# rest of the file
end
控制器:
class Reports::ConsultantsClientsTasksController < ApplicationController
def index
@consultants_clients_tasks = ConsultantsClientsTask.all
end
end
模型(我尝试了使用和不使用表名,无论如何,它应该遵循惯例…对吧?)
class Reports::ConsultantsClientsTask < ActiveRecord::Base
#self.table_name = "CONSULTANTS_CLIENTS_TASKS"
end
这是我创建视图的迁移:
class CreateReportsConsultantsClientsTasksSqlView < ActiveRecord::Migration
def change
execute <<-SQL
CREATE VIEW CONSULTANTS_CLIENTS_TASKS AS
-- rest of the script
;
SQL
end
end
我尝试运行rake db:reset
或rake db:drop db:create db:migrate
,但在这两种情况下都没有正确创建视图。
如果我从psql控制台运行这个(ActiveRecord生成的查询):
SELECT "CONSULTANTS_CLIENTS_TASKS".* FROM "CONSULTANTS_CLIENTS_TASKS";
我得到这个错误:
ERROR: relation "CONSULTANTS_CLIENTS_TASKS" does not exist
LINE 1: SELECT "CONSULTANTS_CLIENTS_TASKS".* FROM "CONSULTANTS_CLIEN...
但是,运行另一个查询:
select * from CONSULTANTS_CLIENTS_TASKS;
没有错误:
consultant_name | client_name | task_name | task_date | task_duration | consultant_cost | client_amount | task_cost_related
-----------------+-------------+-----------+-----------+---------------+-----------------+---------------+-------------------
(0 rows)
我还没有在.html.erb
中映射所有视图的字段,但我认为这不是问题。
那么,关于Rails为什么不能正确查询视图,有什么想法吗?或者为什么视图没有正确创建
提前感谢
它不应该是小写的吗:consultants_clients_tasks?
PG::UndefinedTable: ERROR: relation "reports_consultants_clients_tasks" does not exist.
错误消息似乎表明数据库缺少reports_consultants_clients_tasks的表。检查db/schemas.rb,看看是否有"reports_consultants_clients_tasks"
如果你不这样做,也许你需要迁移数据库
rake db:migrate