我试过寻找其他答案,但我似乎无法弄清楚为什么我的重定向不起作用。Rails redirect_to无法正常工作?
所以我使用Devise with Rails 3.1,并且我正在购物网站。访客不允许将东西添加到他们的购物车中,除非他们已登录。这是我遇到的问题:如果他们没有登录,我想将它们重定向到项目索引页面。下面是我有:
class ItemsController < ApplicationController
def add_to_cart
@item = Item.find(params[:id])
if current_user
@item.update_attributes(:cart_id => @current_cart.id)
redirect_to :back
else
redirect_to categories_path, notice: 'You must sign in to add an item to your cart.'
end
end
.
.
.
end
至于现在,当我点击的链接添加到购物车,该方法被执行(我可以看到在服务器日志Rails的加载和定义@item),并且它达到'else'语句,但不会发生重定向。
我已经为index,new等生成了脚手架(所有的REST风格的动作)。另外,我确定我正在使用add_to_cart方法,因为我试着用一些puts语句进行调试。这里发生了什么事?
编辑:
此外,另一个可能是使用的奇怪的事情...服务器似乎试图两次执行这种方法,并试图“得到”类别两次:
Started GET "/items/3/add_to_cart" for 127.0.0.1 at 2012-01-12 16:53:11 -0800 Processing by ItemsController#add_to_cart as JS Parameters: {"id"=>"3"} Category Load (0.3ms) SELECT "categories".* FROM "categories" Item Load (0.2ms) SELECT "items".* FROM "items" WHERE "items"."id" = $1 LIMIT 1 [["id", "3"]] Redirected to http://localhost:3000/categories Completed 302 Found in 26ms
Started GET "/items/3/add_to_cart" for 127.0.0.1 at 2012-01-12 16:53:11 -0800 Processing by ItemsController#add_to_cart as JS Parameters: {"id"=>"3"} Category Load (0.2ms) SELECT "categories".* FROM "categories" Item Load (0.2ms) SELECT "items".* FROM "items" WHERE "items"."id" = $1 LIMIT 1 [["id", "3"]] Redirected to http://localhost:3000/categories Completed 302 Found in 25ms
Started GET "/categories" for 127.0.0.1 at 2012-01-12 16:53:12 -0800 Processing by CategoriesController#index as JS Category Load (0.2ms) SELECT "categories".* FROM "categories" CACHE (0.0ms) SELECT "categories".* FROM "categories" Rendered categories/index.html.erb within layouts/application (0.0ms) Completed 200 OK in 35ms (Views: 28.5ms | ActiveRecord: 4.2ms)
Started GET "/categories" for 127.0.0.1 at 2012-01-12 16:53:12 -0800 Processing by CategoriesController#index as JS Category Load (0.2ms) SELECT "categories".* FROM "categories" CACHE (0.0ms) SELECT "categories".* FROM "categories" Rendered categories/index.html.erb within layouts/application (0.0ms) Completed 200 OK in 37ms (Views: 30.6ms | ActiveRecord: 4.2ms)
EDIT 2(Delba的要求)
resources :items do
member do
get 'add_to_cart'
end
end
编辑3:改变else语句的JavaScript
respond_to do |format|
format.js { redirect_to items_path, notice: 'You must sign in to add an item to your cart.' }
end
您是否使用了AJAX的形式? ('remote:true') – Damien 2012-01-13 00:54:18
@Delba是的。这里是我添加到购物车的链接:%= link_to'添加到购物车',{:controller =>“items”,:action =>“add_to_cart”,:id => item.id}, \t:remote => true %> – varatis 2012-01-13 00:58:57
你不应该使用GET来添加'add_to_cart'。使用POST。请张贴您的路线。 – Damien 2012-01-13 00:59:46