Railsで使えるGem RubyOnRailsで帳票印刷

状況に応じてRailsのフォームの種類を変える

投稿日:2012年11月9日 更新日:

前提

railsでdocxを生成する動画

docxを生成するアプリは変数を自動で読み込むけど、状況に応じてフォームの種類を変えたい.

Railsでは変数に応じてフォームの種類を用意している.

ただ、sqliteはいい加減なのでほとんどStringのカラムに収められる.

あとは、状況に応じてフォームを選べるようにすればいい.

仕様の決定

変数のうしろにカンマ区切りでフォームの種類を指定できるようにする.

.text .textareaテキストエリア :text_area
.boolean .checkbox チェックボックスを前につける :check_box
.date年月日 :date_select
.datetime 日時 :datetime_select
.time 時間 :time_select
.url :url_field
.telephone :telephone_field
.email :email_field

正規表現の変更

カンマを認識できるように加える

メタプログラミング第一歩

メソッドはふつうレシーバ.メソッドの形で呼び出す.

けれど、sendメソッドを使えば、send(:method名, arg1, arg2  )という形式でも呼び出せる.

helper

変数の2番目の要素をハッシュとマッチさせて返すヘルパーをつくる

view

あとはform_forタグ内でsendメソッドを使えばOK

できた

 

*テキストエリアのデフォルトの大きさを変更

テキストエリアのデフォルトは大きすぎる気がしたので変更した.

config/initializer/form_helper.rbをつくって次のように書いた.

qiita.com/items/a7afb80269b5c7556fa2

できてない

  • date、time、datetimeなどの複数のパラメータを返すフォームがエラーを出す
  • text_areaの改行コードが反映されない.
  • チェックボックスは1と0の数字になるけど☑とか☐とかにしたい.

チェックボックスの置換え

一番簡単そうなところから

置換えのまえにcheckboxかどうかをチェックして1なら☑それ以外なら☐にする

先頭にencoding: utf-8のマジックコメントをいれることと、stringの”1″であることに注意する

 

テキストエリアの改行に対応

次はdocxの仕様に関係ありそうな改行の実装

調べたところ、改行は二種類あって、w:pタグで囲まれた段落による改行と、w:brの改行コードをいれた段落内改行がある.

それぞれ、つぎのような構成.wordでの入力は普通のエンターキーがpタグによる改行、シフトキーを押しながらエンターキーがbrタグによる改行になる.

普通に使うのはpタグによる改行だろう ということで

  1. pには段落のフォーマット、rには文字のかたまりのフォーマットが書かれているのでこれをコピーして使う.
  2. このとき変数がはいっているtは削除する
  3. 次に空のドキュメントフラグメントを用意
  4. テキストは”n”コードで区切って配列にしてeachでまわす
  5. テキストを代入したNodeを作って、コピーしたrの子にして、さらにそれをpの子にして、ドキュメントフラグメントにいれていく
  6. 最後にドキュメントフラグをもとのpの後ろに挿入する
  7. もともとのpを削除する

で、できたのがこんな感じ.変数がある場所が複数あるのでeachでまわしている.

ちゃんとインデントの位置や太字という情報を保存したうえで、改行できてる.

 

もっとも、バグがあって、1つのtタグの中に複数の変数が入っている場合はうまく機能しない.

当面はテキストはブロックとして入れたい場合に使うということで.

バグじゃないです仕様です.ということにしておこう.

日付のフォーム

調べてみたけどRailsのヘルパーの処理でかなりめんどくさそう

www.alexrothenberg.com/2009/05/21/how-to-use-dates-in-rails-when-your.html

labo.opengroove.com/blog/2010/09/28/rails%E3%81%AEdatetime_select%E3%81%AE%E4%BF%9D%E5%AD%98%E3%81%AE%E4%BB%95%E7%B5%84%E3%81%BF%E3%82%92%E8%AA%BF%E3%81%B9%E3%81%A6%E3%81%BF%E3%82%8B/

いや僕らにはjQuery UIがあるじゃないか.

参考

railscasts.com/episodes/213-calendars-revised

有料配信だしそのまま動いたのでここに詳しく書くのは控える.詳細はビデオをみてもらいたい.

動的なヘルパーとの関係だとフォームヘルパーはclassも設定できるのでこんな感じで

コントローラーにまたがるsharedなパーシャルのcoffee scriptはどこに書けばいいんだろう?

*jquery.ui.global-datapickerを使えば日本語もOK

github.com/lifewithcats/jquery.ui.global-datepicker

設定の仕方はgithubからソースをダウンロードして

こんな構成にファイルを配置

*jquery-1.6.1とか無駄なものは削除しておかないとダメだった.データを削除するときに2回アラートがでたり、変な現象が出た.

application.js

application.css

js.coffee

 

 

 

-Railsで使えるGem, RubyOnRailsで帳票印刷
-,

執筆者:

関連記事

no image

Rails3でrtfを出力

  rtfはリッチテキストフォーマット、ms wordなどで扱えるほか、標準添付のwordpadなどでも扱える config/initializers/mime_types.rbを編集 [c …

RubyでWebを操作できるMechanizeの利用例を集めてみた

By: nubobo – CC BY 2.0 目次1 公式2 使い方など3 リンク 公式 mechanize.rubyforge.org/ 使い方など Mechanize について 楽々ス …

no image

Private_pub(Faye)の管理にForemanを使う~Foreman & Upstart

foremanはFayeサーバーのようにRailsのサーバーとは別プロセスで動くサーバー類をまとめて管理するgemだ 参考 railscasts.com/episodes/281-foreman?la

Rails4でつかえるインラインエディタを試してみた〜X-editable-rails

目次1 x-editable2 bootstrapを導入3 x-editable-rails4 サンプルアプリ x-editable 文字をダブルクリックして編集できるやつ x-editable vi …

Rails3でECサイト構築8 都道府県の登録~spree

  都道府県の登録を忘れていた seedを追っていくとわかるのだけど、rake db:load_file[tablename.yml, dir]で登録できる サンプルは、spree_core …