2011-03-31 66 views
6

我聽說你可以將軌道中的模型綁定到數據庫視圖(而不是像往常一樣),而且這只是通過使用模型表通常具有的名稱創建視圖來實現的。將Rails模型連接到數據庫視圖?

我沒有得到這在軌道3.0.5在PostgreSQL 9

的工作是有什麼我失蹤?

+0

什麼「我沒有得到這個工作」是什麼意思?錯誤? – Zabba 2011-03-31 03:18:49

+0

錯誤是:表'model_name_in_plural'不存在。雖然Viacheslav Molokov的解決方案有效。 – Valentin 2011-07-08 07:17:51

回答

9

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

這工作,太棒了。謝謝! – 2011-04-01 14:36:01

1

我猜這可能與複數有關。但沒有更多的信息,這是困難的。您創建的視圖需要是模型的複數形式。

例如。

CREATE VIEW books AS (SELECT * FROM bookshelves) 

模型應該被稱爲書。

如果不是這樣,您可以設置自定義,在配置不可數複數/是inflections.rb

+0

我試過了,它在另一個應用程序中曾用過一次,但現在不是。不知道它是3.0.5怪異還是什麼。謝謝您的幫助。 – 2011-04-01 14:35:45

相關問題