OraRails

Oracle(9i,10g)+RubyOnRails(Ver1.2.1+Apache+mongrel)の設定メモ

規約外のsave

2007-05-10 19:11:01 | ActiveRecord
Rails の規約では、テーブル名は複数形、主キーはid(インクリメンタルな連番)。

しかし実際にはDBに合わせるとそうもいかない。
複数形と主キーがidでない対応は、ここを見ればわかる。Tips/Ruby/rails

ActiveRecord Base で対応する。

主キーがインクリメンタルな連番ではない場合の対応
HowToUseNonDatabaseProvidedIDs 本家のページ

create時にフックして、self.id = XXXXX って感じでやる。
いつもわからなくなるが、param,attributes の値を入れたいが、うまく引き継げなかった。今回はグローバル変数で対応した。このほうがすっきりする

Rubyの変数とスコープ

検索

2006-12-04 09:22:42 | ActiveRecord
手順

1.OracleでOCI接続する。
2.テーブル名、主キーをセットする。
  ->主キー、テーブル名命名規則と異なる場合
   set_table_name,set_primary_keyが必要

(1)
require 'active_record'

ActiveRecord::Base.establish_connection(
:adapter => "oci",
:username => "***",
:password => "***",
:host => "***")

(2)

class Master <ActiveRecord::Base
set_table_name "TM50RC"
set_primary_key "TM50RC_F02"
has_many :reserve

end

class Reserve <ActiveRecord::Base
set_table_name "RESERVE"
set_primary_key "RCODE"
belongs_to :master,
:foreign_key => "RCODE"


def self.yycall(attributes)
patient = attributes[:parameter]
Reserve.find(:all,:conditions => ["RESERVE.PTID = ? and TM50RC.TM50RC_F01 =?", patient,50],>:include =>:master
end

end

:include の参考は RailsML

validation

2006-11-19 21:17:19 | ActiveRecord
ログインフォームで、oracle接続して、結果があればログイン成功
失敗したら、ログインフォームへ戻るページを作っていますが、

validation でうまくいきません。

--login_controller--
if user = User.authenticate(params[:user])

--user.rb--
class User <ActiveRecord::Base set_primary_key "A"
*1
def self.authenticate(attributes)

nm = attributes[:name]
birth = attributes[:birth]
find(:first, :conditions => [""B" = ? AND "C" = ?, nm,birth])

end
end

*1 にvalidates_format_of :name, :with => /^[1-9a-zA-Z]+$/,
:message => 'は英数字の大小文字しか使えません'

を記載しても うまく動きません。
create,updateでは、うまく行きます。

nm = attributes[:name]
nm = nm.to_i
# nmを数値化することで、回避できましたが、いまいち理解できません

参考サイトを見つけた。参考サイト1くまくま

Migration カラム指定

2006-11-06 19:04:24 | ActiveRecord
参考サイト1.いろいろお勉強

Migration の時のデータ型別指定をまとめます。

抽象表現 Oracle
:primary_keyNUMBER(38) NOT NULL PRIMARY KEY
:stringVARCHAR2(255)
:textCLOB
:integer NUMBER(38)
:float NUMBER
:datetime DATE
:timestamp DATE
:time DATE
:date DATE
:binary BLOB
:boolean NUMBER(1) →これはない。