Подключение модели Rails к представлению базы данных? - PullRequest
6 голосов
/ 31 марта 2011

Я слышал, что вы можете привязать модель в рельсах к представлению базы данных (вместо таблицы, как обычно) и что это купол, просто создав представление с именем, которое обычно будет иметь таблица модели.

Я не могу заставить это работать в rails 3.0.5 с PostgreSQL 9.

Что-то мне не хватает?

Ответы [ 2 ]

9 голосов
/ 31 марта 2011

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.

1 голос
/ 31 марта 2011

Полагаю, это может быть связано с множественным числом.Но без дополнительной информации это сложно.Созданное вами представление должно быть множественным числом модели.

например,

CREATE VIEW books AS (SELECT * FROM bookshelves)

Модель должна называться Book.

Либо так, либо вы можетеустановить пользовательское бесчисленное множественное число в config / inflections.rb

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...