2008-09-19
レイルに乗ってみた〜Rails of Ruby on Rails その16「コンタクトフォームで躓いた(つдT)」
書籍『Rails of Ruby on Rails ~Case of LOCUSANDWONDERS.COM~』で勉強してみた(P176〜)
メーラージェネレータでContactモデルを作成
G5:~/work/locus username$ script/generate mailer ContactMailer
exists app/models/
create app/views/contact_mailer
exists test/unit/
create test/fixtures/contact_mailer
create app/models/contact_mailer.rb
create test/unit/contact_mailer_test.rb
Loaded suite script/generate
Started
Finished in 0.012119 seconds.
0 tests, 0 assertions, 0 failures, 0 errors
G5:~/work/locus username$
モデルを修正
/work/locus/app/models/contact_mailer.rb
@recipientsを送信先のメールアドレスにして、あとは書籍通りなので略。
コントローラの追加
G5:~/work/locus username$ script/generate controller contact index sended
exists app/controllers/
exists app/helpers/
create app/views/contact
exists test/functional/
create app/controllers/contact_controller.rb
create test/functional/contact_controller_test.rb
create app/helpers/contact_helper.rb
create app/views/contact/index.html.erb
create app/views/contact/sended.html.erb
Loaded suite script/generate
Started
Finished in 0.001406 seconds.
0 tests, 0 assertions, 0 failures, 0 errors
ファイルを変更。
/work/locus/app/controllers/contact_controller.rb
書籍の通りなので略。
/work/locus/app/controllers/contact_controller.rb
フォームの追加
書き換え
/work/locus/app/views/contact/index.html.erb
書籍の通りなので略。
送信完了ページを追加
書き換え
/work/locus/app/views/contact/sended.html.erb
ブラウザで確認
入力を検証する Active Formプラグインをインストール
『Secure Git hosting and collaborative development — GitHub』で「Active Form」を検索。
「cs’s active_form at master — GitHub」が見つかったのでClone URL:を使って以下コマンド。
G5:~/work/locus username$ script/plugin install git://github.com/cs/active_form.git removing: /work/locus/vendor/plugins/active_form/.git Initialized empty Git repository in /work/locus/vendor/plugins/active_form/.git/ remote: Counting objects: 14, done. remote: Compressing objects: 100% (11/11), done. remote: Total 14 (delta 1), reused 9 (delta 0) Receiving objects: 100% (14/14), 4.23 KiB, done. Resolving deltas: 100% (1/1), done.
Active Formモデルの作成
新規にファイルを作成
/work/locus/app/models/contact.rb
書籍の通りなので略。
コントローラを修正
変更修正
/work/locus/app/controllers/contact_controller.rb
書籍の通りなので略。
ブラウザで確認
何も記入せず送信をクリック。
検証(バリデーション)機能OK。(でもActive Form使う前にどうなるか確認し忘れたが(´・ω・`))
メモ
- よっしゃぁ第4章終了(・∀・)b
レイルに乗ってみた〜Rails of Ruby on Rails その15「自動返信メールで予想以上に躓いた(つдT)」
書籍『Rails of Ruby on Rails ~Case of LOCUSANDWONDERS.COM~』で勉強してみた(P171〜)
メール送信サーバーの設定を追加する
「構成」って何だっけ。「config」のことか(・∀・)
/work/locus/config/environment.rb
の設定を書き換える。
げっ「require 'gettext/rails'」が出てキタ。以前「gettext」で結構ハマってるからなぁ(||゚Д゚)
たしかRails2.1では/config/environment.rbに「require 'gettext/rails'」は書いちゃ駄目なはず(『レイルに乗ってみた〜Rails of Ruby on Rails その02「GetTextで躓いた(つдT)」 - 牌語備忘録』)。
Gmailは面倒そうなのでyahooメールで登録してみた。(っていうかGmailでやったらメール返って来なかった(つдT))
それ以外はだいたい書籍の指示通り。
メーラージェネレータでOrderMailerモデルの作成
G5:~/work/locus username$ script/generate mailer order_mailer order
exists app/models/
create app/views/order_mailer
exists test/unit/
create test/fixtures/order_mailer
create app/models/order_mailer.rb
create test/unit/order_mailer_test.rb
create app/views/order_mailer/order.erb
create test/fixtures/order_mailer/order
Loaded suite script/generate
Started
Finished in 0.000688 seconds.
0 tests, 0 assertions, 0 failures, 0 errors
モデルを修正
/work/locus/app/models/order_mailer.rb
書籍通りだが、@fromを「xxx@yahoo.co.jp」のアドレスにしないと動かなかった。yahooメール設定してるから?(´・ω・`)
コントローラ修正
コード追加
/work/locus/app/controllers/order_controller.rb
(前回コメントアウトしたとこ)
logger.info "EMAIL:" + @order.email
OrderMailer.deliver_order(@order)
送信内容のテンプレート作成 ビューを追加
/work/locus/app/views/order_mailer/order.erb
書籍通りなので略。
動作確認
商品をカートに入れてチェックアウト。そんでフォーム書いて注文してみる。
メールくるはず。
キタ━━━━(゚∀゚)━━━━ッ!!
メモ
- Gmailでの設定失敗(つдT)
- 『restful_authenticationで認証メールをgmailから送信して、エイリアスアドレスで受信する - ザリガニが見ていた...。』さんのとこ参考にやってみたけどメールが送られてこない(´・ω・`)。自分の設定の仕方が悪いみたい(つдT)
- ちかれた(´・ω・`)
レイルに乗ってみた〜Rails of Ruby on Rails その14「注文処理で一寸ばかり躓いた(つдT)」
書籍『Rails of Ruby on Rails ~Case of LOCUSANDWONDERS.COM~』で勉強してみた(P157〜)
Orderモデル作成
G5:~/work/locus username$ script/generate model order
exists app/models/
exists test/unit/
exists test/fixtures/
create app/models/order.rb
create test/unit/order_test.rb
create test/fixtures/orders.yml
exists db/migrate
create db/migrate/20080919060805_create_orders.rb
Loaded suite script/generate
Started
Finished in 0.000738 seconds.
0 tests, 0 assertions, 0 failures, 0 errors
OrderItemモデル作成
G5:~/work/locus username$ script/generate model order_item
exists app/models/
exists test/unit/
exists test/fixtures/
create app/models/order_item.rb
create test/unit/order_item_test.rb
create test/fixtures/order_items.yml
exists db/migrate
create db/migrate/20080919061426_create_order_items.rb
Loaded suite script/generate
Started
Finished in 0.001182 seconds.
0 tests, 0 assertions, 0 failures, 0 errors
マイグレーションファイル修正
/work/locus/db/migrate/20080919060805_create_orders.rb
書籍通りなので略。
P158の「012_create_orders.rb」は「012_create_order_items.rb」のことかな?
/work/locus/db/migrate/20080919061426_create_order_items.rb
内容は書籍通りなので略。
マイグレーション実行
G5:~/work/locus username$ rake db:migrate (in /Users/username/work/locus) == 20080919060805 CreateOrders: migrating ===================================== -- create_table(:orders) -> 0.0698s == 20080919060805 CreateOrders: migrated (0.0711s) ============================ == 20080919061426 CreateOrderItems: migrating ================================= -- create_table(:order_items) -> 0.0230s == 20080919061426 CreateOrderItems: migrated (0.0240s) ======================== Loaded suite /opt/local/bin/rake Started Finished in 0.000952 seconds. 0 tests, 0 assertions, 0 failures, 0 errors
Orderモデルの修正
次のファルを書き換え。
/work/locus/app/models/order.rb
/work/locus/app/models/order_item.rb
書籍通りなので略。
書き込み量が多くなってきたなぁ(||゚Д゚)
決済・注文画面の作成 Orderコントローラを作成
G5:~/work/locus username$ script/generate controller order new confirm create
exists app/controllers/
exists app/helpers/
create app/views/order
exists test/functional/
create app/controllers/order_controller.rb
create test/functional/order_controller_test.rb
create app/helpers/order_helper.rb
create app/views/order/new.html.erb
create app/views/order/confirm.html.erb
create app/views/order/create.html.erb
Loaded suite script/generate
Started
Finished in 0.003514 seconds.
0 tests, 0 assertions, 0 failures, 0 errors
次のファイルを書き換え。
/work/locus/app/controllers/order_controller.rb
書籍通りなので略。
ちなみに サンプル使う場合は、def createの下記のところをとりあえずコメントアウト。
def create @order = Order.new(params[:order]) cart_to_order if params[:btn_cancel] render :action => 'new' elsif @order.save @cart.cart_items.destroy_all # logger.info "EMAIL:" + @order.email # OrderMailer.deliver_order(@order) else render :action => 'new' end end
お客様情報入力ページ
書き換え
/work/locus/app/views/order/new.html.erb
書籍通りなので略。
注文内容確認ページ
書き換え
/work/locus/app/views/order/confirm.html.erb
書籍通りなので略。
注文完了ページ
書き換え
/work/locus/app/views/order/create.html.erb
書籍通りなので略。
ブラウザで確認
カートに商品を入れて「カートの中を表示」をクリック。
入力して「確認する」クリック。
「注文する」ボタンを押すと
よし(・∀・)b
返信メールは次回。
レイルに乗ってみた〜Rails of Ruby on Rails その13「ショッピングカートで微妙に躓いた(つдT)」
書籍『Rails of Ruby on Rails ~Case of LOCUSANDWONDERS.COM~』で勉強してみた(P144〜)
Cartモデルの作成
G5:~/work/locus username$ script/generate model cart
exists app/models/
exists test/unit/
exists test/fixtures/
create app/models/cart.rb
create test/unit/cart_test.rb
create test/fixtures/carts.yml
exists db/migrate
create db/migrate/20080919043828_create_carts.rb
Loaded suite script/generate
Started
Finished in 0.001031 seconds.
0 tests, 0 assertions, 0 failures, 0 errors
マイグレーション
G5:~/work/locus username$ rake db:migrate (in /Users/username/work/locus) == 20080919043828 CreateCarts: migrating ====================================== -- create_table(:carts) -> 0.0187s == 20080919043828 CreateCarts: migrated (0.0202s) ============================= Loaded suite /opt/local/bin/rake Started Finished in 0.000887 seconds. 0 tests, 0 assertions, 0 failures, 0 errors
モデル修正
ファイルを変更。
/work/locus/app/models/cart.rb
書籍の通りなので略。
CartItemモデルの作成
G5:~/work/locus username$ script/generate model CartItem unit_price:integer quantity:integer cart:references product:references
exists app/models/
exists test/unit/
exists test/fixtures/
create app/models/cart_item.rb
create test/unit/cart_item_test.rb
create test/fixtures/cart_items.yml
exists db/migrate
create db/migrate/20080919044748_create_cart_items.rb
Loaded suite script/generate
Started
Finished in 0.000707 seconds.
0 tests, 0 assertions, 0 failures, 0 errors
マイグレーションファイル修正
ファイルを変更。
/work/locus/db/migrate/20080919044748_create_cart_items.rb
書籍の通りなので略。
繰り返しになるけど、なんで書籍みたいに「010_create_cart_items.rb」でなく「作成日_create_cart_items.rb」になるのかなぁ?
マイグレーション実行
G5:~/work/locus username$ rake db:migrate (in /Users/username/work/locus) == 20080919044748 CreateCartItems: migrating ================================== -- create_table(:cart_items) -> 0.0280s == 20080919044748 CreateCartItems: migrated (0.0291s) ========================= Loaded suite /opt/local/bin/rake Started Finished in 0.001121 seconds. 0 tests, 0 assertions, 0 failures, 0 errors
モデル修正
ファイル変更。
/work/locus/app/models/cart_item.rb
/work/locus/app/models/product.rb
書籍の通りなので略。
Cartコントローラの作成
G5:~/work/locus username$ script/generate controller cart index exists app/controllers/
exists app/helpers/
create app/views/cart
exists test/functional/
create app/controllers/cart_controller.rb
create test/functional/cart_controller_test.rb
create app/helpers/cart_helper.rb
create app/views/cart/index.html.erb
Loaded suite script/generate
Started
Finished in 0.281281 seconds.
0 tests, 0 assertions, 0 failures, 0 errors
上記でできた
/work/locus/app/controllers/cart_controller.rb
に記述。.
書籍の通りなので略。
カート画面の作成 レイアウトを追加
ファイルを新規作成。
/work/locus/app/views/layouts/cart.html.erb
書籍の通りなので略。
カート画面を作成
/work/locus/app/views/cart/index.html.erb
書籍の通りなので略。
カートもライトボックス風に表示
以下のファイルを変更。
/work/locus/app/views/layouts/products.html.erb
/work/locus/app/views/layouts/entries.html.erb
書籍の通りなので略。
しかし、次のファイル
/work/locus/app/views/products/show.html.erb
書籍では「controller => 'cart', 」の行以下を変更の表示だけど、実際は
<%= link_to 'カートに入れる', '#' %>>
が
<%= link_to('カートに入れる',
{:controller => 'cart',
:action => 'add_to_cart',
:id => @product,
:TB_iframe => true,
:width => 760,
:height => 540},
{:class => 'thickbox',
:title => 'Cart'}) %>
となり「'カートに入れる',」の前に「(」はいる。
ブラウザで確認
商品をクリックして詳細から「カートに入れる」をクリック。
メモ
- 書籍の通りにやってるとぉ、やっぱり書籍の記述が微妙に違う気がするぅ。あると思います。
レイルに乗ってみた〜Rails of Ruby on Rails その12「ライトボックス系JSライブラリ〜ちょいと躓いた(つдT)」
書籍『Rails of Ruby on Rails ~Case of LOCUSANDWONDERS.COM~』で勉強してみた(P140〜)
ライトボックス系JSライブラリを使って商品画像を効果的に見せる ライブラリの追加
Spookies Labs からprotothickbox-js-3.1.3.zipをダウンロード・解凍して /locus/public/javascripts/ ディレクトリにいれる。
- protothickbox.js
で一部書き換える。
// var tb_pathToImage = "../images/loadingAnimation.gif"; var tb_pathToImage = "/images/loadingAnimation.gif";
ThickBox 3.1から次のファイルをダウンロード。
/locus/public/stylesheets/ ディレクトリに
- loadingAnimation.gif
をいれる。
ファイル修正変更。
書籍と同じなので略。
ビュー修正
/locus/app/views/products/show.html.erbを修正。
<%= image_tag(
url_for_file_column(@product, :image, 'middle')) %>
のところが
<%= link_to(image_tag(
url_for_file_column(@product, :image, 'middle')),
url_for_file_column(@product, :image),
:class => 'thickbox',
:title => @product.title) %>
となるのでは?(書籍P143では1、2行目の表示が...)
ブラウザで動作確認
とりあえずの商品画像が小さくて分りにくいかもしれないけど見栄えするよね(・∀・)
メモ
- JSライブラリがいい感じ。そのうち勉強するかも。prototype.jsとjQueryどっちらがよいかな?
レイルに乗ってみた〜Rails of Ruby on Rails その11「ショップ画面〜軽く躓いた(つдT)」
書籍『Rails of Ruby on Rails ~Case of LOCUSANDWONDERS.COM~』で勉強してみた(P134〜)
商品一覧が面を作成 コントローラ作成
G5:~/work/locus username$ script/generate controller products index show
exists app/controllers/
exists app/helpers/
create app/views/products
exists test/functional/
create app/controllers/products_controller.rb
create test/functional/products_controller_test.rb
create app/helpers/products_helper.rb
create app/views/products/index.html.erb
create app/views/products/show.html.erb
Loaded suite script/generate
Started
Finished in 0.000564 seconds.
0 tests, 0 assertions, 0 failures, 0 errors
[書籍に間違い発見]書籍P134の下の画像が間違ってる?上と同じだし。
G5:~/work/locus username$ script/generate controller genre show
exists app/controllers/
exists app/helpers/
create app/views/genre
exists test/functional/
create app/controllers/genre_controller.rb
create test/functional/genre_controller_test.rb
create app/helpers/genre_helper.rb
create app/views/genre/show.html.erb
Loaded suite script/generate
Started
Finished in 0.015155 seconds.
0 tests, 0 assertions, 0 failures, 0 errors
コントローラ修正
書籍と同じなので略。
ルート定義を追加する
書籍と同じなので略。
レイアウトを修正する
書籍に書いてある /work/locus/app/views/layouts/products.html.erb が新しくできてなかったので新規作成。
なんでかな?
コードは書籍と同じなので略。
それから /work/locus/app/views/layouts/entries.html.erb を書籍の通り修正。
ビューを修正
書籍と同じなので略。
ブラウザで確認
エラーになったので
map.resources :products
を追加してみた。読み飛ばした?
それから下のほうに
# You can have the root of your site routed with map.root -- just remember to delete public/index.html. # map.root :controller => "welcome"
と書いてあったのでpublic/index.htmlを削除してみた。
そしてまたブラウザで確認 http://localhost:3000/
今度は表示された。
商品詳細画面の作成 コントローラ修正
/work/locus/app/controllers/products_controller.rbを修正。
def show @product = Product.find(params[:id]) end
ビューを追加
/work/locus/app/views/products/show.html.erbを修正。
<div id="content">
<%= image_tag(url_for_file_column(
@product, :cover_image)) if @product.cover_image %>
<div id="item">
<h1><%=h @product.title %></h1>
<%= image_tag(
url_for_file_column(@product, :image, 'middle')) %>
<div id="description">
<%= simple_format(h(@product.description)) %>
</div>
<div class="detail">
<p>価格: <%= h @product.price %>(税込)</p>
<%= link_to 'カートに入れる', '#' %>
</div>
</div>
</div>
ブラウザで確認
商品をクリックで
商品名や写真を適当にいれたので見難くなっちゃった(||゚Д゚)
メモ
- 書籍の間違いなのか、自分の見落としなのかよく分らなくなってきた(´・ω・`)