tatsu99様
いつもご教授ありがとうございます。
Started POSTにならない原因をお調べいただき、ありがとうございます。
ご指示通りに1,2,3の手順で確認してみましたが、
やはり同じくルートを修正しないとUnknown actionのエラーが出ます。
Unknown action
The action 'show' could not be found for CartsController
javascriptの原因ではなさそうです。。
1.ブラウザでjavascriptが無効になっている。#有効になっております。chrome FireFoxの両ブラウザで確認。
2./public/javascripts/ に rails.js が存在しない。#rails.jsは存在いたします。
3./views/layouts/ にapplication.html.erb が存在しない。#application.html.erbも存在いたします。
私もググッてみたのですが、明確な答えがでてこなかっったので
以前教えていただいた、Ruby on Rails wikiのサイトでこの疑問を質問してみました。
レスポンスが来ましたら、またご報告させていただきます。
いつもご丁寧にありがとうございますm(_ _)m
>教えていただいたコードで試してみましたが、やはり同じUnknown actionのエラーがでました^^;
>ルートを修正するのが無難な方法でしょうか?^^;
<%= link_to(image_tag('/images/cart_next.png',:alt =>'購入する', :size =>'180x40'),'/carts/delivery',:method=>'post') %>
こちらでは、上記のコードで正しく動作しています。
念のため確認ですが、
<%= button_to "購入する" , :controller => 'carts', :action => 'delivery' %>
をクリックしたときは、正しく動作していますか。
もし、button_toも正しく動作しないならルートの修正を正しく元に戻していないことになります。
<%= button_toが正しく動作している場合は、原因がよく判りません。
その場合、サーバー側では、どのようなメッセージが出力されていますか?
こちらでは、
link_toの場合、
Started POST "/carts/delivery" for 127.0.0.1 at 2011-08-12 23:10:04 +0900
Processing by CartsController#delivery as HTML
Parameters: {"authenticity_token"=>"qTfXVieCUOrowky0wop+3lWz3cpdVVU7EzRqB8CQzZE="}
Rendered text template (0.0ms)
Completed 200 OK in 1ms (Views: 0.0ms | ActiveRecord: 0.0ms)
button_toの場合
Started POST "/carts/delivery" for 127.0.0.1 at 2011-08-12 23:10:55 +0900
Processing by CartsController#delivery as HTML
Parameters: {"authenticity_token"=>"qTfXVieCUOrowky0wop+3lWz3cpdVVU7EzRqB8CQzZE="}
Rendered text template (0.0ms)
Completed 200 OK in 0ms (Views: 0.0ms | ActiveRecord: 0.0ms)
のようなメッセージが出力されます。
このようなメッセージの内容を教えていただけませんでしょうか?
(こちらのテスト環境はWindows-7 でWEBrick(rails serverコマンド)を使用しています。)
質問者
お礼
tatsu99様
いつもご教授ありがとうございます。
私の方の環境は
===============
MacOS
Ruby1.9.2
Rails3.0.4
rails s コマンドでseverを起動させています。
===============
button_toでは正しく作動しております。
======================
<button_toの場合>
======================
<%= button_to "レジに進む" , :controller => 'carts', :action => 'delivery' %>
resources :carts do #ルートはdeliveryのみ書いております。
collection do
post :delivery
end
end
********************************************
Started POST "/carts/delivery" for 127.0.0.1 at 2011-08-14 10:42:50 +0900
Processing by CartsController#delivery as HTML
Parameters: {"authenticity_token"=>"b+OXq1kneBpn2Nhd1wM6AyvY+w0zbYTWzw6IPfWH7oY="}
Rendered carts/_cart_item.html.erb (11.4ms)
Rendered shared/_header.rhtml (0.6ms)
Rendered shared/_footer.rhtml (0.3ms)
Rendered carts/delivery.html.erb within layouts/carts (29.4ms)
Completed 200 OK in 91ms (Views: 32.5ms | ActiveRecord: 1.9ms)
======================
<link_toの場合> #エラーがでたログです
======================
<%= link_to(image_tag('/images/cart_next.png', :alt => 'レジに進む', :size=>'180x40'),'/carts/delivery',:method=>'post') %>
*************************************************
Started GET "/carts/delivery" for 127.0.0.1 at 2011-08-14 10:32:52 +0900
AbstractController::ActionNotFound (The action 'show' could not be found for CartsController):
Rendered .bundle/ruby/1.9.1/gems/actionpack-3.0.4/lib/action_dispatch/middleware/templates/rescues/unknown_action.erb within rescues/layout (0.8ms)
======================
<link_toでルートを修正した場合> #動作はしております。
======================
match '/carts/delivery', :controller => 'carts', :action => 'delivery'
resources :carts
********************************************
Started GET "/carts/delivery" for 127.0.0.1 at 2011-08-14 10:40:09 +0900
Processing by CartsController#delivery as HTML
Rendered carts/_cart_item.html.erb (11.7ms)
Rendered shared/_header.rhtml (0.9ms)
Rendered shared/_footer.rhtml (0.3ms)
Rendered carts/delivery.html.erb within layouts/carts (69.1ms)
Completed 200 OK in 91ms (Views: 72.8ms | ActiveRecord: 2.4ms)
======================
class CartsController < ApplicationController
======================
carts_controllerの全コードです。
def index
@cart = find_cart
end
def find_cart
session[:cart] ||= Cart.new
end
def add
@cart = find_cart
@cart.add_cart_item(params[:id].to_i)
@cart.select_quantity(params[:id],params[:product][:quantity].to_i) #プルボタンで選ばれた数字の処理
redirect_to :action => 'index'
end
def change_quantity
@cart = find_cart
@cart.change_quantity(params[:id],params[:cart_item][:quantity].to_i)
redirect_to :action => 'index'
end
def delete_cart_item
@cart = find_cart
@cart.delete_cart_item(params[:id].to_i)
redirect_to :action => 'index'
end
def delivery
@cart = find_cart
@addressee = Addressee.new()
end
def confirm
@cart = find_cart
@addressee = Addressee.new(params[:addressee])
unless @addressee.valid?
render :action => 'delivery'
end
end
def delivery_save
@cart = find_cart
@addressee = Addressee.new(params[:addressee])
@addressee.add_order_items_from_cart(@cart)
if @addressee.save
Email.test(@addressee,@cart).deliver
render :action => 'delivery_save'
else
render :action => 'delivery'
end
end
tatsu99さんの方では正しく動作されているのですね。
sessionの絡みかしら…^^;
お手間もかかりますし、もし原因が分かりましたらご教授どうぞよろしくお願い致しますm(_ _)m
お礼
tatsu99様 ずばり/app/views/layouts下に application.html.erb cart.rhtmlがありました_l ̄l○ application.html.erbと同じように追加したら、先程の問題も解決できました。 /app/views/layouts/cart.rhtmlの記述ミスが今回の原因だったのですね。 ================================= *リンクに画像を貼った場合もアクションが指定できる事。 *そしてアクションがPOSの場合はjavascript(rails.js)で行われること。 *rails.jsはapplication.html.erbから呼び出されるようになっている事。 この問題はたくさんの事を勉強させていただきました。 本当にありがとうございましたm(_ _)m たくさんのお手間をおかけしました事をお詫び申し上げます。 そして最後まで原因を考えてくださった事、深くお礼と感謝を申し上げます。