Ruby
前回の続き。 保存のタイミング has_oneアソシエーションに代入すると、いきなりデータベースに保存されるという、ちょっと驚きの挙動が見られます。サンプルはこんな感じ。 require 'rubygems' require 'activerecord' ActiveRecord::Base.establish_connec…
Active Recordその2 今度はテーブル間のリレーションシップに関する話題です。 長いので一旦書く。 1対1のリレーションシップ ここでいきなり、これまでに出てきていないInvoiceモデルが登場します。 この程度はわざわざちゃんと説明しなくても理解しろよっ…
Active Record その1 Railsのキモって感じな機能ですね。 Rails外で動くActive Record sqlite3でこんな感じ。depot/exam/ar1.rbに置いているので、相対パスで../になってます。 require 'rubygems' require 'activerecord' ActiveRecord::Base.establish_con…
しばらく書評三昧でしたが、ようやく一段落したので再開します。 schema_infoテーブル マイグレーションのバージョン管理は、このテーブルがやってたんですね。 どういう構造かと覗いてみると、、 .schema schema_info CREATE TABLE schema_info (version in…
バグと仕様の不備がありました。 バグは、ISBNを単なる数値として正規表現で引っ掛けていたのですが、 http://ja.wikipedia.org/wiki/ISBN によると、チェックディジットはXもありうるということ。 なので、正規表現を調整しました。 あと、仕様の不備っての…
はてなダイアリで本などを紹介するのはいいのですが、やっぱりどこかで蔵書管理(というか既読管理)みたいなものもしたくなってて、二度手間だなあとか思ってました。 とりあえず、ISBNとかを指定すると本を登録できるWebAPIを公開している蔵書管理サービスっ…
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…
WEBrickを起動するときに-eオプションを使うと、参照するDBを切り替えられる。 ruby script/server -e testテストフィクスチャで大量データとか作って、画面で確認するとかいったときに便利かも。 デバッグのヒントとして記載されている、 script/breakpoint…
モデルのユニットテスト sqliteなので、データベースが無いエラーは出ませんでした。 が、テーブルが無いエラーは普通に出たので、rake db:test:prepareは行いました。 Railsとは関係ないのですが、priceが0.01以上ならOKというロジックに対して、テストケー…
/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では…
この章は、ユーザモデルの作成と、ユーザの作成、ログイン、一覧表示、削除などなど一連のユーザ管理システムの構築でした。 最初のころに作ったにっくき(?)adminコントローラが出てきますが、ここはproductsコントローラに読み替えて邁進しました。というわ…
sqliteトラップ以外は、特になし。 ので、自由課題に突入。 ...例えば、カート項目に新しいフィールドを追加するといった何らかの変更を加えた場合、それによってコード全体の更新が必要になりますか? 少なくとも、CartItem to LineItemに変換する以下のコ…
デフォルトだと、値だけ表示されるらしい。 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コマンドラインで、やっても同じだった。 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な…
部分テンプレートのファイル名は、_cart_item.rhtmlじゃなくて、_cart_item.html.erbです。この手の読み替えは延々と続くなあ。 ところで、AJAXの実装を入れたのに動かない!って思ってたら、よく見たらサイドバーの数量がインクリメントされてて動いてまし…
↑のsessionの問題以外は特になし。自由課題をやる。 新しい変数をセッションに加えて、ユーザが何回indexアクションにアクセスしたか記録してみましょう。 store_controller.rbのindexに処理を追加。 def index @products = Product.find_products_for_sale …
cookieにActiveRecordを使うようにしてみたら出ました。 解決策は=>ActiveRecordにセッションを格納するようにしたらエラー あっという間に解決。
sqlite3コマンドが、フロントエンドになっているらしい。 >sqlite3 development.sqlite3 SQLite version 3.5.4 Enter ".help" for instructions sqlite> .databases seq name file --- --------------- ---------------------------------------------------…
色々躓いたのは最初だけだったのか、この章の内容はさほどRails1.2と2.0の違いがなかったのか、よく分かりませんが、とりあえず問題ありませんでした。 ので、またもや自由課題。 サイドバーに日付と時刻を追加してみましょう。 こんな感じ。 <%= Time.now %…
とりあえずscaffoldやり直したので、コントローラ名がadminじゃなくてproductとか、list.rhtmlじゃなくてindex.html.erbだったりとか、色々違いはあるものの、違いをなんとか脳内で吸収しつつここまできました。 ので、章末の自由課題をやってみる。 product…
ここからがすごいところです。 うんぬんと、特にアプリケーションを修正しなくても、migrateするだけでアプリにカラムが追加されるかのごとく説明されてますが、rails2ではそうではなさそう。 Rails2 ことはじめ / 技術屋かくのごとし によると、 後からでも…
リカバリは無理っぽいので、6章の頭っからやり直すことに。 ruby script/generate model productの代わりに ruby script/generate scaffold product title:string description:text image_url:stringとやることにしました。 とりあえず、 rake db:migrate ru…
Usage: script/generate scaffold ModelName [field:type, field:type]...以下略 というわけで、イマドキの(?)scaffoldはコントローラ名を受け取らないようです。。
scaffoldジェネレータはモデル名とコントローラ名の2つのパラメータを取ります。 といいつつ、本の通りにやってみると、 >ruby script/generate scaffold product admin exists app/models/ exists app/controllers/ exists app/helpers/ exists app/views/p…
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…
scaffold ? paginate ? なんじゃそれ? が参考になりました。
%InstantRailsHome%\ruby\bin をパスに通せばよいらしい。 set PATH=C:\InsRails\ruby\bin;%PATH% な感じ。(mysqlも通すようになっているけど、デフォルトのデータベースがsqliteになっているようなので必要ないでしょう。) これでMeadowのshellモードからも…
RailsによるアジャイルWebアプリケーション開発 第2版作者: Dave Thomas,David Heinemeier Hansson,Leon Breedt,Mike Clark,Andreas Schwarz,James Duncan Davidson,Justin Gehtland,前田修吾出版社/メーカー: オーム社発売日: 2007/10/26メディア: 大型本購…
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…