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 …

no image

Rubyでエクセル帳票印刷(.xls)~spreadsheet

  pdfとdocxとxlsが作成できれば帳票印刷で困ることはなさそう spreadsheetというgemを使ってみた 参考 dragonstar.asablo.jp/blog/2009/0 …

Rails3.2でフォームの順番をjQuery UI sortableで並べ替えてSubmit~acts_as_list

Rails3.2でajaxなフォルダツリーを導入する2~dynatree-rails

  目次1 jQuery ajax送信側2 app/views/folders/show.js.coffee3  で、コントローラーを設定4 今までのは置いといてJsonでやり取りするアプロ …

Rubyでウェブサイトを操作してリストをつくる〜mechanize

    By: JoshSemans   以前からRailscastsというRuby on Railsの動画サイトが好きでよく見ているのだが、380近く動画があって気にな …