2013-07-09 2 views
3

Я только начал изучать Ruby on Rails из Agile Web Development с Rails.У шаблона отсутствует ошибка, даже если я сделал redirect_to в контроллере

Выполнение приложения корзины покупок и в процессе реализации функции «Пустая корзина».

<%= button_to 'Empty cart', @cart, method: :delete, 
data: { confirm: 'Are you sure?' } %> 

При нажатии на кнопку «Очистить корзину» вызывает действие уничтожить в контроллере тележки

# DELETE /carts/1 
# DELETE /carts/1.json 

def destroy 
    @cart = current_cart 
    @cart.destroy 
    @session[:cart_id] = nil 

respond_to do |format| 
    format.html { redirect_to store_url, notice: 'Your cart is currently empty' } 
    format.json { head :no_content } 
end 
end 

Здесь я сориентировать ее на store_url, но вместо этого он дает мне ошибку.

Шаблон отсутствует Недостающие тележки шаблон/уничтожить, приложение/уничтожить с {: локали => [: EN]: форматы => [: HTML]: Обработчики => [: Еврорадио,: строитель, : raw,: ruby,: jbuilder,: coffee]}. Искал в: * "/ Users/anil20787/рабочее пространство/railsdir/склад/приложение/просмотров"

Вот выход для рейк маршрутов

Prefix Verb URI Pattern     Controller#Action 
line_items GET /line_items(.:format)   line_items#index 
      POST /line_items(.:format)   line_items#create 


new_line_item GET /line_items/new(.:format)  line_items#new 

edit_line_item GET /line_items/:id/edit(.:format) line_items#edit 

line_item GET /line_items/:id(.:format)  line_items#show 
      PATCH /line_items/:id(.:format)  line_items#update 
      PUT /line_items/:id(.:format)  line_items#update 
      DELETE /line_items/:id(.:format)  line_items#destroy 

    carts GET /carts(.:format)    carts#index 
      POST /carts(.:format)    carts#create 

    new_cart GET /carts/new(.:format)   carts#new 

edit_cart GET /carts/:id/edit(.:format)  carts#edit 

     cart GET /carts/:id(.:format)   carts#show 
      PATCH /carts/:id(.:format)   carts#update 
      PUT /carts/:id(.:format)   carts#update 
      DELETE /carts/:id(.:format)   carts#destroy 

    store_index GET /store/index(.:format)   store#index 

    products GET /products(.:format)   products#index 
      POST /products(.:format)   products#create 

    new_product GET /products/new(.:format)  products#new 

    edit_product GET /products/:id/edit(.:format) products#edit 

    product GET /products/:id(.:format)  products#show 
      PATCH /products/:id(.:format)  products#update 
      PUT /products/:id(.:format)  products#update 
      DELETE /products/:id(.:format)  products#destroy 

    store GET /       store#index 

Я смотрю на this и this сообщений которые похожи на мою проблему. Но я не мог понять, что нужно сделать.

Любая помощь в решении этой проблемы приветствуется.

Edit: - Добавлена ​​{} вокруг redirect_to - выход Добавлено рейк маршруты '

+1

вы не нашли в {} вокруг редиректа? – sevenseacat

+0

используются {} вокруг редиректа. не помогаешь. Ошибка сохраняется. – bobdiya

+0

Может у показать выход после рек маршрутов? – AnkitG

ответ

3

Ok. Я ошибся в понимании работы и проигнорировал некоторые детали, следуя учебнику. Ниже мой CartsController (частично) и причину ошибки

class CartsController < ApplicationController 
before_action :set_cart, only: [:show, :edit, :update, :destroy] 
.. 

    # DELETE /carts/1 
    # DELETE /carts/1.json 
    def destroy 
    @cart = current_cart 
    @cart.destroy 
    @session[:cart_id] = nil 


    respond_to do |format| 
     format.html { redirect_to store_url, notice: 'Your cart is currently empty' } 
     format.json { head :no_content } 
    end 
    end 

    private 
    # Use callbacks to share common setup or constraints between actions. 
    def set_cart 
     begin 
     @cart = Cart.find(params[:id]) 
     rescue ActiveRecord::RecordNotFound 
     logger.error "Attempt to access invalid cart #{params[:id]}" 
     redirect_to store_url, notice: 'Invalid cart' 
     else 
     respond_to do |format| 
      format.html # show.html.erb 
      format.json { render json: @cart } 
     end 
     end 
    end 

    # Never trust parameters from the scary internet, only allow the white list through. 
    def cart_params 
     params[:cart] 
    end 
end 

Почему проблема:

Вспомогательный метод «set_cart» не должен отправить обратно ответ сам по себе на успех. Если он отправит ответ, действие действия не будет выполнено вообще. Поэтому он должен просто попробовать и получить текущую корзину и сохранить ее в переменной экземпляра @cart. Мой метод set_cart действительно пытается отправить ответ. Именно эта попытка ответа поднимает ошибку.

У меня есть фильтр для моего контроллера, который вызывает «set_cart» перед уничтожением. Метод «set_cart» пытается отправить ответ HTML, и в курсе просматривается вид destroy.html.erb, которого нет и результаты недостающий вид исключения.

0

Попробуйте использовать синтаксис происходит некорректно:

class CartsController < ApplicationController 
    respond_to :html, :json 

    def destroy 
    @cart = current_cart 
    @cart.destroy 
    @session[:cart_id] = nil 

    flash[:notice] = "Your cart is currently empty" 
    respond_with @cart 
    end 
end 
+0

Протестировано. Ошибка сохраняется – bobdiya

+0

Удалось ли исправить вашу проблему? Не понимаю, почему вышеуказанное не сработало :( –

+0

У меня есть помощь. Я опубликовал причину, по которой была поднята ошибка. – bobdiya

Смежные вопросы