fc2ブログ

2023.09 «  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 - - - - » 2023.11
TOP > モデルのテーブル名やプライマリキー名を指定する

 ← Ruby-GetText 初体験その1【インストールしてみる】 | TOP | 定数や変数の実験・その5【クラス変数の実験】

モデルのテーブル名やプライマリキー名を指定する 

2007年09月06日 ()
Ruby On Rails でアプリを作るぞー、と決める前からあったテーブルを使いたい場合はどうしましょう。

そんな時に心強いのが、set_table_name です。

普通、モデル名の複数形がテーブル名になったりするのですが、モデルファイルで、set_table_name の後にテーブル名を指定してあげると、指定したテーブル名を使ってモデルが機能するようになります。


例を挙げてみましょう。

code_master という古ーいテーブルが昔からあったとします。

$mysql describe code_master;

+-----------+--------------+------+-----+---------+----------------+
| Field     | Type         | Null | Key | Default | Extra          |
+-----------+--------------+------+-----+---------+----------------+
| id        | int(11)      | NO   | PRI | NULL    | auto_increment |
| code_desc | varchar(255) | YES  |     | NULL    |                |
+-----------+--------------+------+-----+---------+----------------+



それを、OldCodeMaster というモデルで使いたい!という場合は以下のように書けばOK牧場です。

app/models/old_code_master.rb

class OldCodeMaster < ActiveRecord::Base
  set_table_name "code_master"
end




更に、テーブルには普通は id という名前の int 型のプライマリキーを付けるのですが、その名前が違うときには、set_primary_key を使います。

前述のテーブルの最初のカラムが id ではなくて、以下のように code_num というプライマリキーだった場合、

$mysql describe code_master;

+-----------+--------------+------+-----+---------+----------------+
| Field     | Type         | Null | Key | Default | Extra          |
+-----------+--------------+------+-----+---------+----------------+
code_num  | int(11)      | NO   | PRI | NULL    | auto_increment |
| code_desc | varchar(255) | YES  |     | NULL    |                |
+-----------+--------------+------+-----+---------+----------------+



次のように書けばOK牧場です。

app/models/old_code_master.rb

class OldCodeMaster < ActiveRecord::Base
  set_table_name "code_master"
  set_primary_key "code_num"
end




更に更に、あるカラムについて、データ内容は変えたくないけれど、モデルで新しい取り出し方や書き込み方をしたい場合は、メソッドを追加(オーバーライド?)します。

以下の例ですと、code_desc には、古いデータは全て小文字で入っているのですけど、今は全て大文字で読み書きしたい!でも、古いデータは小文字のまま残しておきたい!という場合の書き方です。

class OldCodeMaster < ActiveRecord::Base
  set_table_name "code_master"
  set_primary_key "code_num"
  def code_desc # データの読み込み
    read_attribute("code_desc").upcase
  end
  def code_desc=(code) # データの書き込み
    write_attribute("code_desc", code.downcase)
  end

end



【広告】

[2007.09.06(Thu) 20:49] RubyOnRails(Model)Trackback(0) | Comments(0)
↑TOPへ

 ← Ruby-GetText 初体験その1【インストールしてみる】 | TOP | 定数や変数の実験・その5【クラス変数の実験】

COMMENT

COMMENT POST















管理者にだけ表示

 ← Ruby-GetText 初体験その1【インストールしてみる】 | TOP | 定数や変数の実験・その5【クラス変数の実験】