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

时间:2011-03-31 02:41:47

标签: ruby-on-rails postgresql

我听说你可以将rails中的模型绑定到数据库视图(而不是通常的表格),并且只需创建一个具有模型表通常具有的名称的视图即可。 / p>

我没有在带有PostgreSQL 9的rails 3.0.5中使用它。

我有什么遗失的吗?

2 个答案:

答案 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中设置自定义的,不可数的复数