将Rails模型连接到数据库视图?

我听说你可以将rails中的模型绑定到数据库视图(而不是通常的表格),这只是通过创建一个具有模型表通常具有的名称的视图来实现圆顶。

我没有让它在带有PostgreSQL 9的rails 3.0.5中运行。

有什么我想念的吗?

它的postgresql适配器中的Rails没有在pg_views视图中查找它的模型。

您应该使用某些名称命名视图,而普通模型可以。

你可以创建一些hack,像这样来解决这个问题:

 # -*- 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。

我猜它可能与复数有关。 但没有更多的信息,这很难。 您创建的视图需要是模型的复数forms。

例如。

 CREATE VIEW books AS (SELECT * FROM bookshelves) 

模型应该叫做Book。

或者您可以在config / inflections.rb中设置自定义的,不可数的复数forms