ITコンサルの日常

ITコンサル会社に勤務する普通のITエンジニアの日常です。

Ruby

「RailsによるアジャイルWebアプリケーション開発」18章まで読了

前回の続き。 保存のタイミング has_oneアソシエーションに代入すると、いきなりデータベースに保存されるという、ちょっと驚きの挙動が見られます。サンプルはこんな感じ。 require 'rubygems' require 'activerecord' ActiveRecord::Base.establish_connec…

「RailsによるアジャイルWebアプリケーション開発」18章読み中

Active Recordその2 今度はテーブル間のリレーションシップに関する話題です。 長いので一旦書く。 1対1のリレーションシップ ここでいきなり、これまでに出てきていないInvoiceモデルが登場します。 この程度はわざわざちゃんと説明しなくても理解しろよっ…

「RailsによるアジャイルWebアプリケーション開発」17章まで読了

Active Record その1 Railsのキモって感じな機能ですね。 Rails外で動くActive Record sqlite3でこんな感じ。depot/exam/ar1.rbに置いているので、相対パスで../になってます。 require 'rubygems' require 'activerecord' ActiveRecord::Base.establish_con…

「RailsによるアジャイルWebアプリケーション開発」16章まで読了

しばらく書評三昧でしたが、ようやく一段落したので再開します。 schema_infoテーブル マイグレーションのバージョン管理は、このテーブルがやってたんですね。 どういう構造かと覗いてみると、、 .schema schema_info CREATE TABLE schema_info (version in…

はてなダイアリからISBNとASINを抜き出してStack Stock Booksへインポート

バグと仕様の不備がありました。 バグは、ISBNを単なる数値として正規表現で引っ掛けていたのですが、 http://ja.wikipedia.org/wiki/ISBN によると、チェックディジットはXもありうるということ。 なので、正規表現を調整しました。 あと、仕様の不備っての…

はてなダイアリからISBNとASINを抜き出してStack Stock Booksへインポート

はてなダイアリで本などを紹介するのはいいのですが、やっぱりどこかで蔵書管理(というか既読管理)みたいなものもしたくなってて、二度手間だなあとか思ってました。 とりあえず、ISBNとかを指定すると本を登録できるWebAPIを公開している蔵書管理サービスっ…

「RailsによるアジャイルWebアプリケーション開発」15章まで読了

Active Supportいろいろ。 以下のコードはRails外でも動きます。 require 'rubygems' require 'active_support' Rating = Struct.new(:name, :ratings) rating = Rating.new("Rails", [10, 10, 9.5, 10]) puts rating.to_json puts rating.to_yaml hash = {1…

「RailsによるアジャイルWebアプリケーション開発」14章まで読了

WEBrickを起動するときに-eオプションを使うと、参照するDBを切り替えられる。 ruby script/server -e testテストフィクスチャで大量データとか作って、画面で確認するとかいったときに便利かも。 デバッグのヒントとして記載されている、 script/breakpoint…

「RailsによるアジャイルWebアプリケーション開発」13章まで読了

モデルのユニットテスト sqliteなので、データベースが無いエラーは出ませんでした。 が、テーブルが無いエラーは普通に出たので、rake db:test:prepareは行いました。 Railsとは関係ないのですが、priceが0.01以上ならOKというロジックに対して、テストケー…

「RailsによるアジャイルWebアプリケーション開発」12章まで読了

/info/who_bought/6 → HTML /info/who_bought/6.xml → XML /info/who_bought/6.html → HTML おぉー!RESTfulっぽいよ。これをやるには、config/routs.rbに map.connect ':controller/:action/:id.:format' みたいな設定が必要なようなのですが、Rails2.0では…

「RailsによるアジャイルWebアプリケーション開発」11章まで読了

この章は、ユーザモデルの作成と、ユーザの作成、ログイン、一覧表示、削除などなど一連のユーザ管理システムの構築でした。 最初のころに作ったにっくき(?)adminコントローラが出てきますが、ここはproductsコントローラに読み替えて邁進しました。というわ…

「RailsによるアジャイルWebアプリケーション開発」10章まで読了

sqliteトラップ以外は、特になし。 ので、自由課題に突入。 ...例えば、カート項目に新しいフィールドを追加するといった何らかの変更を加えた場合、それによってコード全体の更新が必要になりますか? 少なくとも、CartItem to LineItemに変換する以下のコ…

sqlite3のselectの結果が見づらい。

デフォルトだと、値だけ表示されるらしい。 sqlite3 db/development.sqlite3 select * from orders; 1|taka|abc-def|taka@abc.com|check|2008-05-09 22:26:31|2008-05-09 22:26:31これだと分かりづらいので、ヘッダを付けてみる。 .header ON select * from …

sqlite3にはforeign keyないらしい。

sqlite3コマンドラインで、やっても同じだった。 sqlite> alter table line_items add constraint fk_line_item_products foreign key (product_id) references products(id) ...> ; SQL error: near "constraint": syntax error sqlite>ので、foreign keyな…

「RailsによるアジャイルWebアプリケーション開発」9章まで読了

部分テンプレートのファイル名は、_cart_item.rhtmlじゃなくて、_cart_item.html.erbです。この手の読み替えは延々と続くなあ。 ところで、AJAXの実装を入れたのに動かない!って思ってたら、よく見たらサイドバーの数量がインクリメントされてて動いてまし…

「RailsによるアジャイルWebアプリケーション開発」8章まで読了

↑のsessionの問題以外は特になし。自由課題をやる。 新しい変数をセッションに加えて、ユーザが何回indexアクションにアクセスしたか記録してみましょう。 store_controller.rbのindexに処理を追加。 def index @products = Product.find_products_for_sale …

No :secret given to the #protect_from_forgery call.発生

cookieにActiveRecordを使うようにしてみたら出ました。 解決策は=>ActiveRecordにセッションを格納するようにしたらエラー あっという間に解決。

Rails2.0からsqliteがデフォルトになったのはいいが、どうやって中身みるんだ?

sqlite3コマンドが、フロントエンドになっているらしい。 >sqlite3 development.sqlite3 SQLite version 3.5.4 Enter ".help" for instructions sqlite> .databases seq name file --- --------------- ---------------------------------------------------…

「RailsによるアジャイルWebアプリケーション開発」7章まで読了

色々躓いたのは最初だけだったのか、この章の内容はさほどRails1.2と2.0の違いがなかったのか、よく分かりませんが、とりあえず問題ありませんでした。 ので、またもや自由課題。 サイドバーに日付と時刻を追加してみましょう。 こんな感じ。 <%= Time.now %…

「RailsによるアジャイルWebアプリケーション開発」6章まで読了

とりあえずscaffoldやり直したので、コントローラ名がadminじゃなくてproductとか、list.rhtmlじゃなくてindex.html.erbだったりとか、色々違いはあるものの、違いをなんとか脳内で吸収しつつここまできました。 ので、章末の自由課題をやってみる。 product…

カラム追加をdb:migrateしたが、画面に即反映されない。

ここからがすごいところです。 うんぬんと、特にアプリケーションを修正しなくても、migrateするだけでアプリにカラムが追加されるかのごとく説明されてますが、rails2ではそうではなさそう。 Rails2 ことはじめ / 技術屋かくのごとし によると、 後からでも…

続・scaffoldがwrong number of arguments (1 for 2)でエラーになる

リカバリは無理っぽいので、6章の頭っからやり直すことに。 ruby script/generate model productの代わりに ruby script/generate scaffold product title:string description:text image_url:stringとやることにしました。 とりあえず、 rake db:migrate ru…

scaffoldの使い方はruby script/generate scaffold --helpで出た。

Usage: script/generate scaffold ModelName [field:type, field:type]...以下略 というわけで、イマドキの(?)scaffoldはコントローラ名を受け取らないようです。。

scaffoldがwrong number of arguments (1 for 2)でエラーになる

scaffoldジェネレータはモデル名とコントローラ名の2つのパラメータを取ります。 といいつつ、本の通りにやってみると、 >ruby script/generate scaffold product admin exists app/models/ exists app/controllers/ exists app/helpers/ exists app/views/p…

modelのエラーメッセージに日本語使ったらエラーになった

def validate errors.add(:price, "は最小でも0.01以上でなければなりません") if price.nil? || price < 0.01 end こんなコードで、こんなエラー。 InsRails/rails_apps/depot/app/models/product.rb:6: unterminated string meets end of file InsRails/ra…

Rails2.0はつまづくものらしい(scaffolding, pagenateはplugin)

scaffold ? paginate ? なんじゃそれ? が参考になりました。

Instant RailsをOpen Ruby Console Window以外から使うには

%InstantRailsHome%\ruby\bin をパスに通せばよいらしい。 set PATH=C:\InsRails\ruby\bin;%PATH% な感じ。(mysqlも通すようになっているけど、デフォルトのデータベースがsqliteになっているようなので必要ないでしょう。) これでMeadowのshellモードからも…

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

RailsによるアジャイルWebアプリケーション開発 第2版作者: Dave Thomas,David Heinemeier Hansson,Leon Breedt,Mike Clark,Andreas Schwarz,James Duncan Davidson,Justin Gehtland,前田修吾出版社/メーカー: オーム社発売日: 2007/10/26メディア: 大型本購…

Ruby on Railsセミナー行って来ました

scaffoldとactiverecordの触り以外何も知らない状態で、どんなもんかと思って行ってみました。 http://www.web-career.com/seminar/rails_2008_0326.html 講師は「基礎Ruby on Rails」の著者で、株式会社オイアクスの代表取締役でもある黒田努氏で、テーマは…

文字列の分割

プログラミングC# p248String#Splitを使って、HTTPヘッダをフィールド名と値に分けます。 using System; using System.IO; class ReadHeader { static void Main(string[] args) { FileInfo file = new FileInfo("header.txt"); using(StreamReader sr = fil…