我試圖將現有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:reset
或rake 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的任何想法?或者爲什麼不正確創建視圖?
在此先感謝
它不應該是小寫'consultants_clients_tasks'嗎? –
請張貼thsi作爲答案,我會接受它。這是問題 – jmm
PostgreSQL將未加引號的標識符摺疊爲小寫字母,Rails將引用背後的標識符。您的視圖名爲'consultants_clients_tasks',但您的代碼正在查找'「CONSULTANTS_CLIENTS_TASKS」'。 –