Я пытался найти другие ответы для этого, но я не могу понять, почему мой редирект не работает.
Итак, я использую Devise с 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', но не перенаправляет случается.
Я уже создал скаффолдинг для индекса, нового и т. Д. (Все действия RESTful). Кроме того, я уверен, что достигаю метода add_to_cart, потому что я пытался отладить некоторые операторы put. Что здесь происходит?
EDIT:
Кроме того, еще одна странная вещь, которая может быть полезна ... Сервер, кажется, пытается выполнить этот метод дважды и пытается "получить" категории дважды:
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 <a href="http://localhost:3000/categories" rel="nofollow">http://localhost:3000/categories</a>
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 <a href="http://localhost:3000/categories" rel="nofollow">http://localhost:3000/categories</a>
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)
РЕДАКТИРОВАТЬ 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