我听说在rails中可以将模型绑定到数据库视图(而不是通常的表格),只需创建一个视图并使用与模型表格相同的名称即可实现。
但我在Rails 3.0.5和PostgreSQL 9中无法实现此功能。
是否有什么步骤我漏掉了?
我听说在rails中可以将模型绑定到数据库视图(而不是通常的表格),只需创建一个视图并使用与模型表格相同的名称即可实现。
但我在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 版本。
CREATE VIEW books AS (SELECT * FROM bookshelves)
模型应该被称为Book。
或者你可以在config/inflections.rb中设置自定义的不可数复数形式。