1

我試圖將現有PostgreSQL視圖(其創建腳本在不同計算機上運行並測試過)映射到Rails應用程序,但我一直在獲取PG::UndefinedTable: ERROR: relation "reports_consultants_clients_tasks" does not exist在Rails中爲現有Postgres視圖獲取「關係不存在」

首先,這是我的路線文件:

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,並且在這兩種情況下視圖都沒有正確創建。

如果我運行這個(由ActiveRecord的生成查詢),從PSQL控制檯:

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

它不應該是小寫'consultants_clients_tasks'嗎? –

+0

請張貼thsi作爲答案,我會接受它。這是問題 – jmm

+1

PostgreSQL將未加引號的標識符摺疊爲小寫字母,Rails將引用背後的標識符。您的視圖名爲'consultants_clients_tasks',但您的代碼正在查找'「CONSULTANTS_CLIENTS_TASKS」'。 –

回答

1

它不應該是小寫:consultants_clients_tasks?

0

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

相關問題