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

Railsでデータベーススキーマの変更と関連するモデルのフォーム

投稿日:

 

gemを公開しました!詳細は記事の最後に!

 

新規投稿するフォームのラベルが変数を使っていて見苦しいので自分で好きなラベルを付けられるようにした

いまのスキーマはこんな感じなので、keysテーブルにlabelカラムを追加する

railsではうまくmigrationファイルの命名規約に沿って作るとその内容に従って作ってくれる

ついでにlabelカラムにインデックスをつけておく.あとでlabelを使って検索するので.

こちらは自動でうまくできなかったので自分でmigrationファイルを書く

 

 

次にlabelは次のように最初は自動登録にしたい

  • テンプレートを登録時に自動で設定する
  • 前に同じ名前の変数を使ったことがあれば、その変数のラベルを使う
  • なければ@@を取り除いた英数字をそのまま使う

ラベルを何回もつけるのはめんどうだからね

モデルに次のように書く

set_keysは変数を自動で認識するメソッドなんだけど、新規作成の場合だけkeyを作るようにしている(だから実はテンプレートの変数の数が変わると色々バグが出るんだけど).それは置いておいて、新規作成の場合にはラベルを追加するようにした.

*あと初めて知ったんだけど、findなら1個のデータだけど、whereで探した場合にはfirstをつけないといけないぽい.arrayぽいものが返ってくる.

次にkeyを編集するフォームを作るんだけど、keyのデータは1個1個独立しているから、templateに関連するkeyのデータをまとめて更新するフォームが必要になる.

こういう場合は、関連するモデルのためのフォームを使うのが便利.

関連性の記述

たんにhas_manyって書くだけじゃなくて、accepts_attributes_forを書くのがみそ

そして、Templateモデルからkeysのattributesにアクセスできるようにする

フォームにはfields_forを使う

すいません.tableタグ使うのが楽なんです.

あとはroutes.rbが必要.今回はkeys_controllerを作ってしまったんで、そっちを使うことにした.ホントはtemplates_controllerに書くんだろうけど.

これでtemplate_keys_edit_pathで編集画面にアクセスできる

 

gemもgithubに公開してみました.
変数を置き換えるという発想自体がserenityやdocx_templaterのものだし機能も劣るんだけど、自分の環境ではどちらも日本語がうまく通らなかった.
ので、日本語でdocxを使いたいほかの誰かの役に立つかもしれないと思ったので.

よかったら感想を送ってください.

github.com/seventhsense/simple_docx_generator

このサンプルアプリもそのうち公開したいと思います.

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

執筆者:

関連記事

SimpleCovのカバレッジをvimに表示させる~simplecov-vim

      github.com/nyarly/Simplecov-Vim 参照 Rails3でテストカバレッジを計測する~simplecov,thin 自分のgem上の …

Rails3.2+Mongoidでログイン機能~devise

  目次1 Gemfile2 generate3 model4 試す5 Login/Logout6 アクセス制限7 メニュー構成を整える8 翻訳 I18n9 見た目を整える Gemfile …

Rails3.2でFacebook風インターフェイスでタグづけ〜acts-as-taggable-on+jquery.tokenInput

By: Mauquoy Token Company – CC BY 2.0 railscasts.com/episodes/258-token-fields?language=ja&#03

簡単にグラフが作成できるC3.jsをRailsでつかってみた

By: Nguyen Hung Vu – CC BY 2.0 目次1 C3.js2 gon3 複数の時系列データで一方にはある時点のデータがあるけど他方にはある時点のデータがないみたいな場 …

Rails3.2でGoogle Calendarライクなカレンダーを使う〜fullcalendar-rails

目次1  fullcalendar-rails2 Hello fullcalendar3 オプション  fullcalendar-rails 2種類あるけど上の方を使った github.com/bok