2016-03-23 9 views
0

Raylarım uygulamasında bir geçişle ilgili bazı sorunlar yaşıyorum. Bu göç dosyasının snippet'idirBirisi bu hatanın nedenini gidermede yardımcı olabilir: ActiveRecord :: Geçiş Hatası PG :: WrongObjectType 'tablo' bir görünüm değil

PG::WrongObjectType: ERROR: "contributions" is not a view 

:

class ReplaceContributionView < ActiveRecord::Migration 
    def up 
    execute <<-SQL 
     CREATE OR REPLACE VIEW contributions AS (
     (
     SELECT id, 
     id AS person_id, 
     project_id AS project_id, 
     name_fact_id AS name_fact_id, 
     null AS position_id 
     FROM people 
     WHERE project_id IS NOT NULL 

     .........etc etc. ........... 
    end 

    def down 
    ......... 
    end 
end 

contributions tablo için benim geliştirme veritabanını kontrol edilmesi o olduğunu gösterir ben bekleyen göçler yürütmek zaman şöyle bir hata alırsınız gerçekten bir manzara.

\d contributions 

Materialized view "public.contributions" 
Column | Type | Modifiers 
--------------+---------+----------- 
id   | bigint | 
person_id | bigint | 
project_id | integer | 
name_fact_id | integer | 
position_id | integer | 
Indexes: 
    "index_contributions_on_id" UNIQUE, btree (id) 
    "index_contributions_on_project_id" btree (project_id) 

Ben de benim test veritabanı üzerinde göç hiçbir hata ürettiğini işaret etmek istiyorum ve sorunsuz migrate ve rollback mümkün.

Bu geçişe takılıyorum ve çözülene kadar bir şey yapamıyorum. Sorun ne olabilir? view ve materialized view farklı şeyler olmadıkça açıkça görülmektedir. Herhangi bir fikri olan var mı? Yardım takdir edilecektir.

cevap

0

yerine 'CREATE OR REPLACE' arasında oluşturduktan sonra görünümü bırakarak ve deneyin: Bu açıkça belirtecek şekilde de

def up 
    execute('DROP VIEW contributions') 
    execute('CREATE VIEW contributions AS (
    (
    SELECT id, 
     id AS person_id, 
     project_id AS project_id, 
     name_fact_id AS name_fact_id, 
     null AS position_id 
    FROM people 
    WHERE project_id IS NOT NULL 

    .........etc etc. ...........' 
end 

, bu tablo bir olan tablo 'v_contributions' adlandırma düşünebilirsiniz tabloyu görüntüle.

İlgili konular