Rails

今年の予定

Gemの作り方を調べる。 Railsのgeneratorの作り方を調べる。 generatorでmigrationを生成できるようにする。

foxy fixtures

Ruby on Railsの2.0で新しくなったところを3分の1くらい目を通した。 フィクスチャから他のフィクスチャのデータをラベルで参照できるようになってるみたい。フィールド名と同じ名前のフィクスチャから探してくれるわけか。今までidの整合性を取るのが大変だ…

assert_select

Railsのリファレンスマニュアルを見てたらassert_selectというのを見つけた。HTMLにレンダリングされたテンプレートの中身について調べるときにCSSのセレクタと同じ書式で要素を指定できるものだった。 その要素に対して文字列や正規表現とマッチングしたり…

カレンダー

今日はイベントカレンダーでも作ろうかな。一日一行の単純なやつと、カレンダー形式に並ぶのと両方作ってみよう。 一日一行のはあっというま。ただ、1日に複数のイベントがある時に日付のところ(table内のth要素)にrowspanを追加する部分だけ気をつける必要…

履修単位登録

なんとなく3月までやってたプロジェクトの履修単位登録を動かそうとしてみたらrake db:fixtures:loadでエラーが出た。time型のテストデータにupdated_at: nilってYAMLで書いてもnilが文字列になるからだ。直しておいたけど。 今見ても結構凝ったユーザーイン…

ビューとか

ビューがテストで上手く使えないのでそのクエリーを検索時に直書きすることになったんだけど、そういえばSQLを直に書くと型変換がされなかったり、思うようなモデルオブジェクトになってくれなかったりするからビューにしたんだっけ。 でも試してみると案外…

Railsでビューを使いたかった

データベースのビューがテストのほうにコピーされていなくて、そのせいでテストが通らずはまっていた。 原因は分かったものの、rake testとしたときにビューがある状態にする方法が分からない。勝手にビューなし、あるいはビューをテーブルにしたテスト環境…

テストファースト

編集だけ先に作ってあったのを参考に書いたテストを元に、新規作成のテストを書いて、それから初めて新規作成が動くのを確かめた(ずっと確かめてなかった)。インターフェースとしては珍しくちゃんとテストファーストでやり遂げたわけだ。 もうIntegrationテ…

Integration

Integrationテストで一番参考になったのはRailsのAPIドキュメントのActioncController::IntegrationTestだった。あとActioncController::Integration::Sessionも参考になる。単純にパスを指定してgetやpostすればいいんだけど、結局postのパラメータは自力で…

Integrationテスト

Login Engineを使っているとテストでよく分からないエラーがでる。以前どうにかして解決したんだけど、Integrationテストの時にもまたエラーが出たので困った。 テストの一つ(最初のテスト?)に、require 'application'を書くだけだったんだけど。ちなみにapp…

テスト

Railsで作られるtestディレクトリのうち、unit(単体)テストはモデルの、functional(機能)テストはコントローラーのテストで、fixturesはテストデータ、mocksはたぶんモックを入れておくところ。じゃあintegration(統合)テストでは何をするのかというと、その…

テスト

テストの残り。 トランザクション中のバリデーションとか、fixtureの書き間違いとかを直す。 あとトランザクション中にエラーになった場合に黙って編集画面に戻ってしまう時はビューにerror_messages_forを増やして(無ければ新しく書いて)エラーになりうるオ…

テスト

エラーが150くらいと失敗が20くらいあるのをずっと放置していたfunctionalテストだが、そろそろどうにかしようと思い立った。 ほとんどはScaffoldが生成したfixtureとテストが参照しているデータの名前が食い違っているのが原因。fixtureはone, twoなのにな…

時間型

ActiveRecordのTime型のカラムは保存前にActiveRecordごとinspectすると文字列に見えてたんだけど、実際はTimeだったので、いくらvalidates_format_ofでバリデートしようとしても上手くいかなかった。前にもこんなことやってた気がする。 ところでこのTime型…

アソシエート

あるテーブルに属する小さなデータを編集する時て、いちいち編集画面を行き来するのが面倒なので、 ここはやはりAjaxの出番か。 メインのデータを編集しながら属するデータも増減させられる。

link_to_back

事前にメソッドを呼んでおいたアクションに戻るヘルパを作った。 呼ばれた時点のコントローラとアクションをセッションに記録しているだけだけど。

複数のテーブルをUNIONしたVIEWから単一テーブル継承

親テーブルからLEFT JOINするから関係ない子まで取ってきてしまうわけだから、子テーブルを起点に検索すればいいんだけど、子テーブルは数種類ある。 子テーブルそれぞれにクエリーかけて結合するとソートとかpaginateで面倒なので、いっそ全部の子テーブル…

VIEW

数種類のテーブルから同じ親テーブルを参照しているときに検索したくて、ActiveRecordだとどれかのテーブルを起点にする必要があるので親テーブルを起点にしたんだけど、子が複数あったら1行にそれを詰め込むか、あるいは子の数だけ分割する必要があったんだ…

検索とソート

今度は複数のテーブルを対象に検索するんだけど、親テーブルから分岐しているテーブルなのでActiveRecordの親テーブルから子をincludesする形になるんだけど、親に検索条件がマッチしたら子が全部出てくるんだよなぁ。そうすると2次元のテーブルに納まらない…

検索とソート

検索結果を表示してソートもできるようにするのを既に二つのテーブルに作ってあって、それをもう一つのテーブルでもできるようにする。というのが10分かからずに終わってしまった。昨日とおとといで最低限の記述で実現できるように工夫してたからな。

検索画面

キーワードでいくつかのカラムを検索する画面を作ってみた。 最初はAjax_scaffoldでやろうと思ったけど、DBのカラムになっていないカラムを検索できそうにないので自作する。 DBのカラムになっていないと言っても、joinしたらSQLからは見えるので自分で書く…

ajax_scaffoldプラグイン

scaffoldのlistをソートしたいなと思って何かないか探してたらAjaxのscaffoldを見つけたので試してみた。 編集フォームがリストの間に出てくるという、履修単位登録でもやった方式だけど、やっぱり自分でいちいち作らなくてもたたき台を作ってくれるのは楽だ…

寝てからRSS

調子が悪いので仕事しないで寝てた。たいして食べたわけでもないのに食べ過ぎな状態。オフィスは静かで寝やすい。夕方ちょっと起きて、RubyでRSSを出力する方法をしらべかけて、Railsで作られたアプリがどうRSSを吐いてるかソースとか調べたらrxmlで普通にxm…

先にOpenOfficeのBaseで設計してから、あとでRailsのmigrationを書くというやりかたでやってる。 同期できるツールがあるといいかも。あるいは初めからmigration使わないか。

layout

Railsで複数のビューが共通のレイアウトを使うようにするには、layoutに共通のテンプレートとしてapplication.rhtmlを作っておいて、個別のlayoutのテンプレートを作らなければいいということに今更ながら気付いた。

LoginEngine

RailsでLoginEngineを実験中。RailsやEngineのバージョンアップへの対応がちょっと遅れている様子。ドキュメント通りにはいかないのでいろいろググってなんとかする。 なんかサインアップのメールが届かないと思ったら、smtpサーバが変わってたからか。それ…