Hatena::Diary

牌語備忘録 このページをアンテナに追加 RSSフィード

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

ブラウザで確認

http://localhost:3000/contact

f:id:CortYuming:20080919211724p:image


入力を検証する 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

書籍の通りなので略。

ブラウザで確認

http://localhost:3000/contact

何も記入せず送信をクリック。

f:id:CortYuming:20080919211646p:image

検証(バリデーション)機能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

書籍通りなので略。

動作確認

http://localhost:3000/

商品をカートに入れてチェックアウト。そんでフォーム書いて注文してみる。

メールくるはず。

f:id:CortYuming:20080919200406p:image

キタ━━━━(゚∀゚)━━━━ッ!!

メモ






レイルに乗ってみた〜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

書籍通りなので略。

ブラウザで確認

http://localhost:3000/

カートに商品を入れて「カートの中を表示」をクリック。

f:id:CortYuming:20080919164400p:image

入力して「確認する」クリック。

f:id:CortYuming:20080919164401p:image

f:id:CortYuming:20080919164402p:image

「注文する」ボタンを押すと

f:id:CortYuming:20080919164510p:image

よし(・∀・)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'}) %>

となり「'カートに入れる',」の前に「(」はいる。

ブラウザで確認

http://localhost:3000/

商品をクリックして詳細から「カートに入れる」をクリック。

f:id:CortYuming:20080919144358p:image

メモ

  • 書籍の通りにやってるとぉ、やっぱり書籍の記述が微妙に違う気がするぅ。あると思います。


レイルに乗ってみた〜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/ ディレクトリにいれる。

  1. protothickbox.js

で一部書き換える。

// var tb_pathToImage = "../images/loadingAnimation.gif";
var tb_pathToImage = "/images/loadingAnimation.gif";

ThickBox 3.1から次のファイルをダウンロード

  1. thickbox.css
  2. loadingAnimation.gif
  3. macFFBgHack.png

/locus/public/stylesheets/ ディレクトリ

  • thickbox.css
  • macFFBgHack.png

/locus/public/images/ ディレクトリ

  • 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行目の表示が...)

ブラウザで動作確認

http://localhost:3000/

f:id:CortYuming:20080919113050p:image

とりあえずの商品画像が小さくて分りにくいかもしれないけど見栄えするよね(・∀・)

メモ





レイルに乗ってみた〜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 を書籍の通り修正。

ビューを修正

書籍と同じなので略。

ブラウザで確認

http://localhost:3000/

f:id:CortYuming:20080919092036p:image

エラーになったので

/work/locus/config/routes.rbに

  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/

f:id:CortYuming:20080919092037p:image

今度は表示された。

商品詳細画面の作成 コントローラ修正

/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>

ブラウザで確認

http://localhost:3000/

商品をクリックで

f:id:CortYuming:20080919092038p:image

商品名や写真を適当にいれたので見難くなっちゃった(||゚Д゚)

メモ

  • 書籍の間違いなのか、自分の見落としなのかよく分らなくなってきた(´・ω・`)