Rails в своем адаптере postgresql не смотрел в pg_views
представлении своих моделей.
Вы должны называть представления с некоторыми именами, как это делают ваши обычные модели.
Вы можете создать небольшой взлом, например, чтобы решить эту проблему:
# -*- encoding: utf-8 -*-
ActiveSupport.on_load(:active_record) do
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.class_eval do
def table_exists?(name)
return true if super
name = name.to_s
schema, table = name.split('.', 2)
unless table # A table was provided without a schema
table = schema
schema = nil
end
if name =~ /^"/ # Handle quoted table names
table = name
schema = nil
end
query(<<-SQL).first[0].to_i > 0
SELECT COUNT(*)
FROM pg_views
WHERE viewname = '#{table.gsub(/(^"|"$)/,'')}'
#{schema ? "AND schemaname = '#{schema}'" : ''}
SQL
end
end
end
Поместите это в файл RAILS_ROOT/config/initializers/postgresql_view_support.rb
.
PS:
Этот код предназначен для Rails 3.0.5.