我聽說你可以將軌道中的模型綁定到數據庫視圖(而不是像往常一樣),而且這只是通過使用模型表通常具有的名稱創建視圖來實現的。將Rails模型連接到數據庫視圖?
我沒有得到這在軌道3.0.5在PostgreSQL 9
的工作是有什麼我失蹤?
我聽說你可以將軌道中的模型綁定到數據庫視圖(而不是像往常一樣),而且這只是通過使用模型表通常具有的名稱創建視圖來實現的。將Rails模型連接到數據庫視圖?
我沒有得到這在軌道3.0.5在PostgreSQL 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。
這工作,太棒了。謝謝! – 2011-04-01 14:36:01
我猜這可能與複數有關。但沒有更多的信息,這是困難的。您創建的視圖需要是模型的複數形式。
例如。
CREATE VIEW books AS (SELECT * FROM bookshelves)
模型應該被稱爲書。
如果不是這樣,您可以設置自定義,在配置不可數複數/是inflections.rb
我試過了,它在另一個應用程序中曾用過一次,但現在不是。不知道它是3.0.5怪異還是什麼。謝謝您的幫助。 – 2011-04-01 14:35:45
什麼「我沒有得到這個工作」是什麼意思?錯誤? – Zabba 2011-03-31 03:18:49
錯誤是:表'model_name_in_plural'不存在。雖然Viacheslav Molokov的解決方案有效。 – Valentin 2011-07-08 07:17:51