@kyanny's blog

My life. Opinions are my own.

Rails

Tokyo Rails Meetup に行ってきた

TOKYO Rails #4 - 11/2/2011 @ COOKPAD[twitter:@sanemat] さんに誘ってもらって参加してきた。一緒に行く人がいると最初からぼっち回避できるので安心感が違いますね!トークセッションが二つ(他にもルンバ?の話があったみたいだけどほとんど聞き取れず)…

Rails のログをリクエスト単位で grep する rails-log-block-grep を改良した

Rails のログをリクエスト単位で grep する rails-log-block-grep というプログラムを書いて一年くらい使っていたのだけど、不便さを感じたので機能追加した。ついでに Ruby で書きなおした。https://github.com/kyanny/rails-log-block-grepgrep(1) の -A, …

STI で継承したモデルのクラス名を参照したら uninitialized constant エラー

STI and uninitialized constant error | Blogger catこれとまったく同じ状況になった。 STI (Single Table Inheritance) を使って継承した子のモデルのクラス名(定数)を参照すると NameError: uninitialized constant が発生する。先に親のモデルのクラス…

COOKPAD on Rails Meetup

ref: http://d.hatena.ne.jp/a666666/20110802/1312298735This night I had some conversations with rubyists including Japanese, Hangalian, etc. Thanks a lot.I should try to speak to foreigners in English more aggressive.

I'll go to COOKPAD on Rails Meetup

http://tech.cookpad.com/2011/07/announcing-the-first-cookpad-on-rails-meetup-842011.htmlI will try to speak in English.

Log::Minimal インスパイアなロガーのラッパー

弊社は椅子の飛ばない穏やかな社風ですが、ログは重要ですね。しかし logger.info とか何度もタイプするのはめんどいし、時刻とか(超大事!)どこで呼ばれたとか(大事!)を真面目に入れるとロガ―呼び出しが長くなって嫌ですね。なので Log::Minimal っぽ…

Testing your helper methods in legacy Rails

In Rails 2.1 or later, you can test your helper methods by ActionView::TestCase.Testing Helpers In Rails 2.1 | VigetUnfortunately, legacy Rails doesn't have ActionView::TestCase. But you can write test for your helpers.ruby - How to test c…

RAILS_ROOT/lib/tasks 以下にあるタスク*だけ*を実行する Rakefile2 の作り方

Rails デフォルトの db:* 系タスクを誤って production 環境で実行すると悲惨なので Rakefile は使いたくない しかしバッチ処理などは Rake タスクとしてまとめておきたい(console で都度実行するのはオペミスが怖い) という事情があって、個別にスクリプ…

インテグレーションテストの中でセッション (CGI::Session) に値をセットする

いわゆるセッション (コントローラのアクションのなかで session[:hoge] とかでアクセスできるアレ) に値を入れた状態でリクエストしたいときはこうやる。ちなみにアレは CGI::Session のインスタンスっぽい。 def test_hoge @request.session[:hoge] = "hog…

Rails のログをリクエスト単位で grep する

何度も似たようなのを書いては捨ててるような気もするけど、性懲りもなくまた書いた。GitHub - kyanny/rails-log-block-grepRails のログは apache やら lighttpd やらのログ (common とか extended/combined とかよばれる) と違って一リクエストが複数行に…

ActiveRecord::Base#find で find(:all, :conditions => { :key => [1,2,3] }) とすると SQL の WHERE 句が `key` IN (1,2,3) になるしくみ

AWDwR 3rd Edition によると Rails 1.2 から ActiveRecord::Base#find の :conditions に Hash を渡せるようになったようで、その際にログを眺めてたら実行される SQL の WHERE 句が IN () を使っていた。これをどこでやってんのか気になったのでソースを追…

ActiveRecord::Base#find_by_sql のコードを読んだ

プレースホルダの展開を String#gsub でやってるところがキレイだなーと思っただけなんだけど、せっかく読んだので少しだけどメモしとく。全部 rails/activerecord/lib/active_record/base.rb のコードでコピペしてあるのは v2.3.8 のやつ。 def find_by_sql…

Rails勉強会@東京第51回に参加した

Rails' Wiki - Rails勉強会@東京第51回に参加してきました。初参加でした。ちなみに Ruby 関連の勉強会に参加するのもこれが初めて。セッション形式の勉強会というのは初めてで、始まる前はけっこう緊張していたけど、いざ始まってみると案外うまく馴染めた…

Rails 環境下で任意のスクリプトを引数つきで実行する方法

$ RAILS_ENV=production script/runner wget.rb < urls.txt while url = gets # do something end とする。

Time オブジェクトを YYYY-mm-dd というフォーマットで

Time.now.to_date.to_s #=> "2010-05-11" とする。 YYYY-mm-dd HH:MM:SS なら Time.now.to_s(:db) で。

閑話休題: 俺のかわいい depot が動かなくなった...

二週間ばかり停滞していたけど、今日の午後に二時間ほど時間が作れたので続きをやろうとしたら、 Rails 環境が動かなくなってしまっていた。たぶん、 /usr/local 以下に入れた ruby1.8.7-p249 で動かしていたのに、それを消しちゃって MacPorts から入れた R…

gettext と gettext/rails のバージョンによる違い

メモ。Ruby の gettext パッケージは、 1.x 系と 2.x 系で gettext/rails っていうファイルの有無に差があるっぽい。 rails 2.0 とかだと gettext 1.90.0 とかの gettext/rails を同梱してるバージョンじゃないとダメのようで gettext/rails がないよー、と…

version=2.3.5 の rails コマンドでそれより低いバージョンの doc/api を作る

古いバージョンの rails の doc/api が欲しいとき用のやり方。 http://www.oiax.jp/rails/rails2/freeze_gems.html がうまくいかなかった。例として 2.0.2 の doc/api をつくる。 2.0.2 もインストールされてることが前提。 $ rails --version #=> 2.3.5 $ r…

第11章 タスクF: ユーザ管理

管理画面と管理者ユーザの追加、アクセス制限などの実装。モデルの仮想属性、セッションによる認証、トランザクションとフックなど。 モデルの仮想属性 attr_accessor などで定義する データベースのテーブルのカラムと関連付かないがモデルオブジェクトが保…

第10章 タスクE: チェックアウト!

注文する機能の実装。モデル間のリレーションが出てきた。 has_many, belongs_to など。 データベースの外部キー制約 データベースの種類に依存する (汎用性はない) モデル間のリレーションシップ モデルと連動したフォーム 空のモデルオブジェクト (まだデ…

第9章 タスクD: Ajaxの追加

Ajax。部分テンプレート、 RJS など。 RJS はなんかむずかしそう。 部分テンプレート ビューの一部を専用のファイルにおさめたもの ふつうは one action => one view template となる 「一つのテンプレートにロジックが入りすぎていないか」 部分テンプレー…

第8章 タスクC: カートの作成

ショッピングカート機能を実装する。セッションを使う。フラッシュも。 セッション ステートレスな HTTP プロトコルの上位でステートフルトランザクションの仕組みを擬似的に実現するもの Rails では cookie ベースのものがデフォルト => 他のストレージを使…

第7章 タスクB: カタログの表示

カスタマーがアクセスする商品一覧ページを作る。 抽象度を持たせてプログラムを作成する コントローラのアクション内にモデルべったりの実装をしない レイアウトを利用してテンプレートを warp する yield :layout, @content_for_layout button_to ヘルパー…

第6章 タスクA: 商品の管理

商品管理機能を実装する。 データベース接続情報 config/database.yml scaffold と migration migration ファイルの中で self.up, self.down メソッドを定義する 検証 (validation) はモデルで行う モデルはコードの世界とデータベースの間に立つ門番 モデル…

第5章 Depotアプリケーション

第5章はこれから作る Depot についての概要説明のみ。実作業はないのでパス。 RailsによるアジャイルWebアプリケーション開発 第3版 RailsによるアジャイルWebアプリケーション開発 第3版 (見だし一覧) GitHub - kyanny/agile_web_development_with_rails: M…

第4章 Hello, Rails!

4章からは実践編なのでひたすらサンプルコードを打ち込んだ。なのであんまり拾ってメモすることがない。いくつかマーカーをひいたところもあるので、そこを書きつつ、 github のコミットへの permalink を並べておく。 URL /path/to/app/controller/action E…

第3章 Railsのインストール

インストールの方法だけなので軽く流す。 特定のバージョンの Rails をインストールする # gem install rails --versioin 2.2.2 新しい Rails アプリケーションを作るときに特定のバージョンの Rails を使うように指定する $ rails _2.2.2_ --version Rails …

第2章 Railsアプリケーションのアーキテクチャ

MVC Model (How, どのように実行すべきか) モデルは門番 ビジネスルール、データ検証、データストア ActiveRecord ORM (Object Relational Mapping) テーブル => クラス, 行 => オブジェクト, 列 => オブジェクトの属性 View ユーザーインターフェース 商品…

第1章 はじめに

トニー・ブザン「頭がよくなる本」をだいたい読み終えつつあるので、読み終えた章のマインドマップを書いていくことにした。読みながら重要だと思ったキーワードにマークをつけているので、そのマークを中心に拾い読みしてマインドマップを書く => キーワー…

「RailsによるアジャイルWebアプリケーション開発 第3版」を読み始めた

一日に2章ずつ読んでコードを実際に入力していくのを目標に。飽きとさぼり防止のために git で管理して一ステップずつコミットしていく。きりがいいところ(章が終わった)で github に push する。一回目の読みとコードの入力を同時にやると視線が動きすぎ…