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

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

投稿日:

 

前提

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で帳票印刷
-,

執筆者:

関連記事

Rails3.2+jQueryUI1.10でjQuery-UI-Bootstrapのデモ画面を出すところまでやった

なにかいつの間にかかっこいい感じのサイトになってた addyosmani.github.com/jquery-ui-bootstrap/ jquery-ui-bootstrap.github.io/j …

Railsでhtmlファイルやリンク先のスクリーンショットを撮影~IMGKit&wkhtmltoimage

  github.com/csquared/IMGKit 目次1 環境2 wkhtmltoimageのインストール3 imgkitのインストール4 試す5 日本語フォント 環境 ubuntu …

Rails3.2.8でテーブル並び替えのテストを作る~cucumberと正規表現

前提 Railsのテーブル並び替えを実装する Rails3.2.8で自動テスト環境を整える〜cucumber+spork+guard 目次1 作戦(ストラテジー)2 have_contentの正規表現 …

no image

RubyとRailsのテスト関係のリンクメモ

  目次1 RSpec2 Factory Girl3 Capybara RSpec rspec.info/ Expectations とMatcher rubydoc.info/gems/r

Rails4.1に対応したRefinery CMS 3.0を試してみた

By: Alexis Madrigal – CC BY 2.0 目次1 Refinery CMS2 Gemfile3 generate4 configファイル5 起動6 管理画面7 トラブ …