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

執筆者:

関連記事

no image

Rails4とPostreSQL9.3で全文検索〜pg_bigm

目次1 準備2 migration3  使い方 準備 エクステンションを導入しておく Ubuntu Server12.04でPostgreSQL9.3をつかう〜pg_bigmで全文検索 migrati …

MIddlemanでrails-assets.orgをつかってbowerのコンポーネントをつかう

By: Simon Cunningham – CC BY 2.0 middlemanは静的なサイトのジェネレータ rails-assets.orgは「the frictionless pr …

no image

Ubuntu ServerのGuardからネットワーク経由でWindowsのブラウザをリロードする~guard-livereload

Ubuntu12.04.1でCoffeeScriptの自動makeとブラウザの自動リロード~guard-coffeescript   Ubuntu ServerのGuardからGrowl f …

Rails3.2とBackbone.jsでサーバーサイドのページネーション

By: Haldane Martin – CC BY 2.0   前提 Rails3.2とBackbone.jsでサーバーサイドのフィルタリング Rails3.2とBackbon …

no image

RailsでGoogle Mapを使ってみる~Google-Maps-for-Rails

github.com/apneadiving/Google-Maps-for-Rails   前提

こんな感じで perso …