|
Contents |
|
Edgar のモデルのカラム名には一定の規約があります。edgar_scaffold でモデル・コントローラ・ビューを生成する際、以下のことを考慮してカラム名を決めてください。
popup 選択画面に表示するモデルには name というカラムかメソッドが必須です。
edgar_scaffold で生成するモデルには特に必要ありません。しかし、リレーションを設計する時点で belongs_to となった場合に必要になる(popup で参照される際の表示に使用される)ので、name カラムあるいはメソッドを定義しておいた方が無難でしょう。
(NOTE: まだ完全ではありませんが、現時点の仕様について述べます。)
住所を表現するには、整数カラム(例: adrs_id)を追加し、下記のように モデルにて宣言します:
class Author < ActiveRecord::Base : edgar_address :adrs : end
既存のアドレスの表示が気に入らない場合は app/views/edgar/_address.html.erb 部分テンプレートをカスタマイズして下さい。
今のところ、edgar_address を使う場合、モデルの初期化時に以下のような ロジックを追加する必要があります (例として test/dummy/app/models/author.rb を載せました):
class Author < ActiveRecord::Base ... def initialize(attrs = {}) super self.adrs = Edgar::Address.new if self.adrs == nil end end
EdgarにおけるEnumとは、整数定数を定義したモジュールのことです。 draw_enum() ヘルパを使うことで、任意の AR の整数カラムを、ラベル付き選択肢として表示・入力できます。
選択肢のラベルは I18n 対応されており、ActiveRecord::Base.human_const_name() API を使って表示されます。 詳細は lib/edgar/model.rb の rdoc を参照下さい。
以下は、Question モデルの Priority enum 選択肢を、整数カラムである @question.priority に対して表示します:
<% edgar_form_for do |f| %> : <%= draw_enum(f, :priority) %> : <% end %>
↓
選択肢のラベルの国際化対応は、config.default/locales/*.yml の activerecord.enums.question/priority エントリを参照して下さい。
任意の整数型カラム(例: 'xyz')に対し、'XyzBitset' モジュールを定義することで ビットセットカラムとして扱うことができます。 ここで、'XyzBitset' モジュールには 2^n^ の定数値 (0x01, 0x02, 0x04, ...等、1bitのみ立っているbitflag値)を定義します。
Edgar::FieldHelper.draw_flags() ヘルパを使って各bitflagに対応したチェックボックスを表示します。
また、定数名に対応するロケールを定義しておくことで チェックボックスのラベルが国際化対応されます。
実例として Edgar::ModelPermission モデルを挙げます:
class Edgar::ModelPermission < ActiveRecord::Base : module FlagsBitset CREATE = 0x01 READ = 0x02 UPDATE = 0x04 DELETE = 0x08 end : end
以下の例は:
<%= draw_flags(f, :flags) %> :
フォーム上で、以下のようなチェックボックスとして表示されます:
ここで、 f は FormBuilder 変数です。
Edgar自体にファイルアップロードの機能はありませんが、 既存のモジュールである Paperclip と Remotipart を使用することで あっという間にファイルアップロードが完成します。
Bookモデル test/dummy/app/models/book.rb 及び Bookビュー test/dummy/app/views/books/ を参照下さい。