我正在使用具有多个数据库用户的现有oracle数据库。我的问题是我必须在我的Ruby on Rails应用程序中集成现有视图,该视图由另一个数据库用户持有。我的用户仅被授予'视图的权利。我怎么处理这个?
答案 0 :(得分:0)
您可以生成一个模型以从视图中获取数据。根据视图名称和架构,您可能需要覆盖AR的默认值。例如,假设您的视图名为other_user_view_ora
,并且有一个名为user_id
的primary_key,您希望以User
class User < ActiveRecord::Base
set_primary_key "user_id"
set_table_name "other_user_view_ora"
# database perms will enforce this, but just being pedantic
def readonly?
true
end
end
然后,您应该像使用任何ActiveRecord对象一样使用视图。
另一种选择是通过ActiveRecord::Base.connection
发出sql命令。所以在您的控制器中执行类似
def from_user_view
@results = ActiveRecord::Base.connection.execute "select * from other_user_view_ora limit 2"
end
然后在您的视图中,您可以迭代@results
数组,将每个结果视为哈希。
示例:
<% @results.each do |result| %>
<td><%=result['user_id']%></td>
<td><%=result['name']%></td>
<% end %>
答案 1 :(得分:0)
我在以下方面取得了成功:
从Oracle网站下载基本的,SQLPlus,SDK,即时客户端 (例如,对于Mac http://www.oracle.com/technetwork/apps-tech/intel-macsoft-096467.html)
将上面的内容解压缩并移到/ usr / lib 创建这些符号链接:
ln -s libclntsh.dylib.12.1 libclntsh.dylib
ln -s libclntsh.so.12.1 libclntsh.so
将此添加到您的gemfile
gem 'ruby-oci8'
gem 'activerecord-oracle_enhanced-adapter', :git => 'git://github.com/rsim/oracle-enhanced.git'
运行bundle install
运行以下命令:
export NLS_LANG="AMERICAN_AMERICA.UTF8"
export ORACLE_HOME=/bin/oracle/11_2x64
export DYLD_LIBRARY_PATH=$ORACLE_HOME
export LD_LIBRARY_PATH=/usr/lib
现在您已经开始工作了,请添加以下环境:
my_oracle_db:
adapter: oracle_enhanced
database: IPADDRESS/INSTANCE
username: USER
password: PASSWORD
到你的database.yml
现在创建一个模型:
class OracleBase < ActiveRecord::Base
self.abstract_class=true
establish_connection (:my_oracle_db)
#whatever methods
end
然后根据您在Oracle中的视图创建模型
class MyOracleView < OracleBase
self.table_name = "SCHEMA.NAMEOFORACLEVIEW"
#whatever methods you want to add
end
然后像往常一样在Rails中创建控制器和视图。另请注意,您可能需要使用Oracle模式和表名的全部大写。
答案 2 :(得分:0)
感谢大家的帮助!
作为@JimEvans解决方案,创建模型是令人满意的:
class TankBank < ActiveRecord::Base
self.table_name = "GEVIS.TANK_BANK"
end