[前][次][番号順一覧][スレッド一覧]

rails:2047

From: "YOKOYAMA, Hideyuki" <yokoyama@c...>
Date: Thu, 01 Mar 2007 06:35:03 +0900
Subject: [rails:2047] Re: コード値の表示時の変換方式


横山です
いつもお世話になっております

内海様 ご回答ありがとうございます
以下インラインにて失礼します

|内海@ベルギーです
|
|エレガントな方法としてはジャンルもテーブルにしてしまって、
|   :select => 'music.genre, genres.name',
|   :joins  => 'INNER JOIN genres ON musics.genre = genres.id'
|として説明もデータベースから取り込む方法でしょうか。

他にもコード値を持つカラムがそこそこあるため
クエリの実行コストを考えると
この方法はちょっと難しそうです

|もしジャンルの数が少なくて増えたり減ったりしないというのであれば
|ハッシュとして持つのはどうでしょうか。
|
|class Music < ActiveRecord::Base
|GENRES = {
|   1 => "邦楽",
|   2 => "洋楽",
|   3 => "クラシック",
|   4 => "その他"
|}.freeze
|end
|
|View内
|<%= Music::GENRES[music.genre] %>
|
|こうしておけば、データ入力のところでセレクトドロップダウンにもす 
|ぐに使えます。
|<%= select 'music', 'genre', Music::GENRES.invert %>
|
|いかがでしょうか?

ハッシュは考えたのですが
helper に定義しようかと思いました
おっしゃるとおり model に定義した方が
上記のように便利そうです


|モデル内で次のような関数を作る方がより良い解決策でしょうか?
|   def genre_name
|     GENRES[:genre]
|   end

この関数の使用方法の例は
controller で
@m = Music.find(:first)
view で
<%= @m.genre_name %>
という感じでしょうか?
これだと見た目もすっきりでいい感じです
さらに to_s や to_i と同じように
<%= @m.genre.to_desc %>
と出来ればベストのイメージです
でも Ruby では
 def genre.to_desc
   GENRES[:genre]
 end
とは確か定義できないんですよね
(素人ですみません)
なんらかの方法で上記の
genre.to_desc
は定義可能なんでしょうか?


|> 横山です
|> いつもお世話になっております
|>
|> 既出でしたら申し訳ありません
|> DB にコードで入っている値を
|> 意味のある表示にしたい場合は
|> どのような方式がエレガントでしょうか?
|>
|> 例)
|> musics という table の genre :integer というフィー 
|> ルドには
|> 1:邦楽 2:洋楽 3:クラシック 4:その他
|> みたいな感じでどれかの値が入っています
|>
|> find 等で取得した model を view で表示する場合に
|> いちいち if や case で変換して表示するのはダサいです
|> (genre == 1 だったら "邦楽"みたいな)
|>
|> helper や model で genre.to_desc() みたいなメソッ 
|> ドか
|> もしくは何か別の方法でマッピングを定義することは出来ないでしょ 
|> うか?


/*----
横山 秀行
YOKOYAMA, Hideyuki <yokoyama@c...>

-- PGP PUBLIC KEY SERVER URL --
http://pgp.mit.edu:11371/pks/lookup?op=get&search=0x089F75BE
----*/


--
ML: rails@r...
使い方: http://QuickML.com/

[前][次][番号順一覧][スレッド一覧]

      2041 2007-02-28 05:47 [hisano@s...         ] 多段のlayoutの作成方法                  
      2042 2007-02-28 08:03 ┗[moriq@m...          ]                                       
      2043 2007-02-28 09:01  ┗[hisano@s...         ]                                     
      2044 2007-02-28 17:50   ┗[yokoyama@c...       ] コード値の表示時の変換方式        
      2045 2007-02-28 18:09    ┣[shachi@j...         ]                                 
      2046 2007-02-28 19:06    ┗[utsumi@t...         ]                                 
->    2047 2007-02-28 22:35     ┗[yokoyama@c...       ]                               
      2048 2007-02-28 23:52      ┣[utsumi@t...         ]                             
      2049 2007-03-01 00:15      ┃┣[utsumi@t...         ]                           
      2052 2007-03-01 00:24      ┃┃┗[yokoyama@c...       ]                         
      2050 2007-03-01 00:19      ┃┗[yokoyama@c...       ]                           
      2051 2007-03-01 00:23      ┗[moriq@m...          ]                             
      2053 2007-03-01 00:30       ┣[moriq@m...          ]                           
      2055 2007-03-01 16:51       ┗[yokoyama@c...       ]                           
      2056 2007-03-01 18:59        ┗[moriq@m...          ]