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だけ変更することはありません。単に何もしません。
を書くことであると思いますか? –
クラスは名詞でなければならず、メソッドは前記名詞を扱う動詞でなければなりません。 'DeleteBasket'という名前のクラスを持つことには意味がありません。また、正確に何が動作していないのですか?あなたの 'DeleteBasket'クラスは構文的にも正しくありません。 –
構文上の誤りは何ですか? – Jes