Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
selectable_attr_rails makes possible to use selectable_attr in rails application
Ruby
branch: master
Failed to load latest commit information.
gemfiles https://gemnasium.com/akm/selectable_attr_rails の指摘の通りに最新のバージョンを使うように…
lib selectable_attr単体でI18nが使えるように したのでselectable_attr_railsからはその機能を削除しました
spec rails-2.3.14 よりも前のバージョンはサポート外にしました。またjrubyではテストが全然動かないのでこれも対象外にしました
.gitignore
.travis.yml
Gemfile https://gemnasium.com/akm/selectable_attr_rails の指摘の通りに最新のバージョンを使うように…
MIT-LICENSE selectable_attrからrails依存部分を分けて別のgemにしました。
README.md
Rakefile TravisCIを使ってテストをがっつりやるように設定してみました
VERSION Version bump to 0.3.15
init.rb バージョンを0.3.11に上げて、READMEのインストール方法をちょっと修正しました。
install.rb
selectable_attr_rails.gemspec selectable_attr単体でI18nが使えるように したのでselectable_attr_railsからはその機能を削除して、バ…
uninstall.rb

README.md

SelectableAttrRails Build Status

Introduction

selectable_attr_railsは、selectable_attrをRailsで使うときに便利なヘルパーメソッドを提供し、 エントリをDBから取得したり、I18n対応するものです。 http://github.com/akm/selectable_attr_rails/tree/master

selectable_attr は、コードが割り振られるような特定の属性についてコードプログラム上での名前表示するための名前などをまとめて管理するものです。 http://github.com/akm/selectable_attr/tree/master

Install

a. plugin install

ruby script/plugin install git://github.com/akm/selectable_attr.git ruby script/plugin install git://github.com/akm/selectable_attr_rails.git

b. gem install

[sudo] gem install selectable_attr_rails

config/initializers/selectable_attr.rb require 'selectable_attr' require 'selectable_attr_i18n' require 'selectable_attr_rails' SelectableAttrRails.setup

チュートリアル

selectヘルパーメソッド

以下のようなモデルが定義してあった場合 class Person < ActiveRecord::Base include ::SelectableAttr::Base

  selectable_attr :gender do
    entry '1', :male, '男性'
    entry '2', :female, '女性'
    entry '9', :other, 'その他'
  end
end

ビューでは以下のように選択肢を表示することができます。 <% form_for(:person) do |f| %> <%= f.select :gender %> <% end %>

form_for、fields_forを使用しない場合でも、オブジェクト名を設定して使用可能です。 <%= select :person, :gender %>

また以下のように複数の値を取りうる場合にもこのメソドを使用することが可能です。 class RoomSearch include ::SelectableAttr::Base

  multi_selectable_attr :room_type do
    entry '01', :single, 'シングル'
    entry '02', :twin, 'ツイン'
    entry '03', :double, 'ダブル'
    entry '04', :triple, 'トリプル'
  end
end

<% form_for(:room_search) do |f| %>
  <%= f.select :room_type %>
<% end %>

この場合、出力されるselectタグのmultiple属性が設定されます。

radio_button_groupヘルパーメソッド

一つだけ値を選択するUIの場合、selectメソッドではなくを出力することも可能です。 上記Personモデルの場合

<% form_for(:person) do |f| %>
  <%= f.radio_button_group :gender %>
<% end %>

この場合、... という風に続けて出力されるので、改行などを出力したい場合は 引数を一つ取るブロックを渡して以下のように記述します。

<% form_for(:person) do |f| %>
  <% f.radio_button_group :gender do |b| %>
    <% b.each do %>
      <%= b.radio_button %>
      <%= b.label %>
      <br/>
    <% end %>
  <% end %>
<% end %>

f.radio_button_groupを呼び出しているERBのタグが、<%= %>から<% %>に変わっていることにご注意ください。

check_box_groupヘルパーメソッド

複数の値を選択するUIの場合、selectメソッドではなくを出力することも可能です。 上記RoomSearchクラスの場合

<% form_for(:room_search) do |f| %>
  <%= f.check_box_group :room_type %>
<% end %>

この場合、... という風に続けて出力されるので、改行などを出力したい場合は 引数を一つ取るブロックを渡して以下のように記述します。

<% form_for(:person) do |f| %>
  <% f.check_box_group :gender do |b| %>
    <% b.each do %>
      <%= b.check_box %>
      <%= b.label %>
      <br/>
    <% end %>
  <% end %>
<% end %>

f.check_box_groupを呼び出しているERBのタグが、<%= %>から<% %>に変わっていることにご注意ください。

DBからのエントリの更新/追加

各エントリの名称を実行時に変更したり、項目を追加することが可能です。

class RoomPlan < ActiveRecord::Base
  include ::SelectableAttr::Base

  selectable_attr :room_type do
    update_by "select room_type, name from room_types"
    entry '01', :single, 'シングル'
    entry '02', :twin, 'ツイン'
    entry '03', :double, 'ダブル'
    entry '04', :triple, 'トリプル'
  end
end

というモデルと

 create_table "room_types" do |t|
   t.string   "room_type", :limit => 2
   t.string   "name", :limit => 20
 end

というマイグレーションで作成されるテーブルがあったとします。

エントリの追加

room_typeが"05"、nameが"4ベッド"というレコードがINSERTされた後、 RoomPlan#room_type_optionsなどのselectable_attrが提供するメソッドで 各エントリへアクセスすると、update_byで指定されたSELECT文が実行され、 エントリとしては、 entry '05', :entry_05, '4ベッド' が定義されている状態と同じようになります。

このようにコードで定義されていないエントリは、DELETEされると、エントリもなくなります。

エントリの名称の更新

実行時に名称を変えたい場合には、そのidに該当するレコードを追加/更新します。 例えば、 room_typeが"04"、nameが"3ベッド"というレコードがINSERTされると、その後は 04のエントリはの名称は"3ベッド"に変わり、また別の名称にUPDATEすると、それに よってエントリの名称も変わります。

このようにコードによってエントリが定義されている場合は、DELETEされてもエントリは削除されず、 DELETE後は、名称が元に戻ります。

I18n対応

エントリのロケールにおける名称をRails2.2からの機能である、I18nを内部的にしようして取得できます。

上記RoomPlanモデルの場合、

config/locales/ja.yml

ja:
  selectable_attrs:
    room_types:
      single: シングル
      twin: ツイン
      double: ダブル
      triple: トリプル

config/locales/en.yml

en:
  selectable_attrs:
    room_types:
      single: Single
      twin: Twin
      double: Double
      triple: Triple

というYAMLを用意した上で、モデルを以下のように記述します。

class RoomPlan < ActiveRecord::Base
  include ::SelectableAttr::Base

  selectable_attr :room_type do
    i18n_scope(:selectable_attrs, :room_types)
    entry '01', :single, 'シングル'
    entry '02', :twin, 'ツイン'
    entry '03', :double, 'ダブル'
    entry '04', :triple, 'トリプル'
  end
end

これで、I18n.localeに設定されているロケールに従って各エントリの名称が変わります。

Credit

Copyright (c) 2008 Takeshi AKIMA, released under the MIT lice nse

Something went wrong with that request. Please try again.