実行環境:
ruby 1.9.3
Rails 3.1.3
ruby-oci8 2.0.6
activerecord-oracle_enhanced-adapter 1.4.0
Rails3で外部のOracle DBにアクセスします。ruby 1.9.3
Rails 3.1.3
ruby-oci8 2.0.6
activerecord-oracle_enhanced-adapter 1.4.0
その2:Railsモデル編としてRailsで接続できるようなモデルを作成します。
Oracle DBアダプタ(Gemファイル)のインストール
Railsアプリ内の Gemfile に以下の2行を追加します。bundlerでインストールします。 gem 'ruby-oci8' gem 'activerecord-oracle_enhanced-adapter'
$ bundle install
接続設定(database.yaml)
データベース接続の設定を行います。①標準のDB(developmentやproduction)として外部のOracle DBを使う場合
デフォルトで Sqlite3 を使う設定になっているところを Oracle 用の設定に変更します。
ここで書くサービス名などはローカル・ローミング・パラメータ、つまり tnsnames.ora ファイルで設定したものになります。詳しくは前回の記事 development: adapter: oracle_enhanced database: [サービス名] username: [ユーザー名] password: [パスワード] production: adapter: oracle_enhanced database: [サービス名] username: [ユーザー名] password: [パスワード] [Rails3] 外部のOracle DBに接続する(その1:準備編) を見て下さいね。
②標準のDBは内部のSqlite3を使い、特定のモデルだけで外部のOracle DBを使う場合
development:, test:, production: などは残しておいて、下記内容を追記する。
oracle_db: adapter: oracle_enhanced database: [サービス名] username: [ユーザー名] password: [パスワード]
外部DBへの接続のやり方については以前まとめました ⇒ [Rails3] ActiveReocrdで外部DBを使う
Scaffoldの作成
通常の Scaffold と同様に作成する。$ rails generate scaffold user uid:integer name:string comment:string
既存のテーブル(レガシーDB)を使う場合は migration と timestamps をスキップするオプションをつけて作成するとよいと思います。
$ rails generate scaffold user uid:integer name:string comment:string --skip-migration --skip-timestampsここで指定するカラム名は使用するものだけでよい。(内部的にはテーブルのカラムを全て取ってくるので、ここで指定しなかったカラムでも view 等でアクセスできる。)
モデルの修正
①標準のDB(developmentやproduction)として外部のOracle DBを使う場合特に修正の必要はありません。
②標準のDBは内部のSqlite3を使い、特定のモデルだけで外部のOracle DBを使う場合
接続先を通常のdevelopment/productionのDBではなく、oracle_dbで定義したものを使うように設定する。
endの前の2行はOracleのテーブルがRailsの規約に従っていないときの措置です。テーブル名がモデル名(ここではusers)と一致しない場合は set_table_name で実際のテーブル名を指定する。主キー名がidでない場合は、set_primary_key で主キーとなるカラム名を指定する。 class User < ActiveRecord::Base establish_connection(:oracle_db) set_table_name "[Oracleのテーブル名]" set_primary_key "uid" end
サーバーとして立ち上げて
$ rails serverブラウザからアクセスしてみましょう。
0 件のコメント:
コメントを投稿