2016-07-12 3 views
0

私はSinatraを使用してShopを書いています。私はBasketに追加を実装しましたが、Basketの作業から削除することはできません。Ruby、Sinatra DELETEメソッド

私のクラスのApp:

get "/basket" do #working 
     products_in_basket = FetchBasket.new.call 
     erb :"basket/show", locals: { basket: products_in_basket } 
    end 

    post "/basket" do #working 
     AddToBasket.new(params).call 
     redirect "/" 
    end 


    delete "basket/:id" do # doesn't work 
    DeleteBasket.new(params).call 
    redirect "/" 
end 

マイDeleteBasket:

module Shop 
    class DeleteBasket 
    attr_reader :product_id, :id 

    def initialize(params) 
     @id = params.fetch("id").to_i 
     @product_id = params.fetch("product_id").to_i 

    end 
    def call 
     basket = FetchBaskets(id) # finds Basket instance with given id 

     return unless basket 

     reduce_basket_quantity(basket) 



    def reduce_basket_quantity(basket) 
     if basket.quantity >= 1 
     basket.quantity -= 1 
     #warehouse = FetchWarehouseProduct.new.call(product_id) 
     #warehouse.quantity += quantity 
     else 
     BASKET.delete(basket) 
     end 
     end 
    end 
    end 
end 

ビューで削除:

<td> <form action="/basket/<%=b.id%>" method="post"> 
    <input type="hidden" name="_method" value="delete"> 
    <input type="hidden" name="product_id" value=<%= b.product_id %>> 
    <input type="hidden" name="id" value=<%= b.id %>> 
    <button type="submit">Delete</button> 
    </form> 

それが必要としてホームページにリダイレクトし、それはありませんバスケットの数量を1だけ変更することはありません。単に何もしません。

+0

を書くことであると思いますか? –

+0

クラスは名詞でなければならず、メソッドは前記名詞を扱う動詞でなければなりません。 'DeleteBasket'という名前のクラスを持つことには意味がありません。また、正確に何が動作していないのですか?あなたの 'DeleteBasket'クラスは構文的にも正しくありません。 –

+0

構文上の誤りは何ですか? – Jes

答えて

0
私はあなたが delete HTTPメソッドを呼び出していないされ、最も明白な理由に考える

、代わりにpost

<form action="/basket/<%=b.id%>" method="post"> 

は、通常は

<form action="/basket/<%=b.id%>" method="delete"> 

を使用することによってこの問題を解決するだろうが、これはまだありませんthis answerに従ってサポートされています。

私はあなたの最善の策は、post

post "delete-basket/:id" do 
    DeleteBasket.new(params).call 
    redirect "/" 
    end 

としてあなたdeleteルートを定義して、あなたはどのようなORMを使用している

<form action="/delete-basket/<%=b.id%>" method="post"> 
関連する問題