获得"关系不存在"对于Rails中现有的Postgres视图

时间:2016-04-15 19:31:11

标签: ruby-on-rails postgresql ruby-on-rails-4 rails-activerecord

我试图将现有的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:resetrake 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为何无法正确查询View的想法?或者为什么没有正确创建视图?
提前致谢

2 个答案:

答案 0 :(得分:2)

不应该是小写的:consultants_clients_tasks?

答案 1 :(得分:0)

PG::UndefinedTable: ERROR: relation "reports_consultants_clients_tasks" does not exist.

错误消息似乎表明数据库缺少reports_consultants_clients_tasks的表。检查db / schemas.rb并查看是否有&#34; reports_consultants_clients_tasks&#34;

如果您不想迁移数据库

rake db:migrate