我听说你可以将rails中的模型绑定到数据库视图(而不是通常的表格),并且只需创建一个具有模型表通常具有的名称的视图即可。 / p>
我没有在带有PostgreSQL 9的rails 3.0.5中使用它。
我有什么遗失的吗?
答案 0 :(得分:9)
它的postgresql适配器中的Rails没有在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。
答案 1 :(得分:1)
我猜它可能与复数有关。但没有更多的信息,这很难。您创建的视图需要是模型的复数。
例如
CREATE VIEW books AS (SELECT * FROM bookshelves)
模型应该叫做Book。
或者您可以在config / inflections.rb中设置自定义的,不可数的复数