« ねこのばば | トップページ | 学習RoR(19) ラジオボタンまわりの試み »

学習RoR(18) セレクトタグまわりを修正

 フォームにおいてあるドロップダウンリストから選択すると、それに応じた内容のドロップダウンリストを別に表示する、という処理をしているところがあるのだけれど、このパーシャルファイルがちょっともったりした感じでよろしくないので修正を試みた。

 はじめはこんな感じ。

<%
 case item_kind
 when "雑誌"
%>
<p><label for="edition_kind"><%=h _('kind') %></label>
  <%= select :edition, :kind, %w(本誌 本誌+ 付録 別冊 増刊 ファイル) %>
</p>
<%
 when "単行本"
%>
<p><label for="edition_kind"><%=h _('kind') %></label>
  <%= select :edition, :kind, %w(ハードカバー ソフトカバー ハード+ケース ソフト+ケース ケース 冊子 カバー) %>
</p>

 必要な分だけ when が並んでいていかにも DRY な感じからは遠い。ということで、はじめにリスト項目をモデルに移すことからやってみた。モデルのほうに、

 MAGAZINE = %w(本誌 本誌+ 付録 別冊 増刊 ファイル).freeze
 BOOKS = %w(ハードカバー ソフトカバー ハード+ケース ソフト+ケース ケース 冊子 カバー).freeze

 といったふうに書いておいて、先のセレクトタグを次のように修正。

 <%= select :edition, :kind, Edition::MAGAZINE %>

 少しすっきりとしたけれど、まだ同じものがずらずら並んでいるのはどうもよくない。ということでヘルパーに書くことにする。

 def edition_kind_list(x)
  case x
  when "雑誌"
   Edition::MAGAZINE
  when "単行本"
   Edition::BOOKS
  end
 end

 これでパーシャルファイルのほうは、

<p><label for="edition_kind"><%=h _('kind') %></label>
 <%= select :edition, :kind, edition_kind_list(item_kind) %>
</p>

 だけでよくなった。これでようやくすっきり。

|
|

« ねこのばば | トップページ | 学習RoR(19) ラジオボタンまわりの試み »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/28835/14269358

この記事へのトラックバック一覧です: 学習RoR(18) セレクトタグまわりを修正:

« ねこのばば | トップページ | 学習RoR(19) ラジオボタンまわりの試み »