私はアマゾンのようなウェブサイトに取り組んでいます。
アイテムがまだカートにない場合、ログインしたユーザー (アイテム表示ページ) にアイテムをカートに追加するオプションを提供します。ユーザーが「Add to cart
」ボタンをクリックすると、アイテムがカートに追加されますが、ユーザーはアイテムの表示ページに残ります。
アイテムがすでにカートに追加されている場合は、代わりに「Remove from Cart
」ボタンが表示されます。ユーザーがボタンをクリックすると、アイテムはカートから削除されますが、ユーザーは新しいページにリダイレクトされません。彼はアイテムのショーページにとどまります。
私は Rails を初めて使用するので、これを機能させるために多くの方法を試してきました。
コード:
/app/models/user.rb
has_and_belongs_to_many :items
/app/models/item.rb
has_and_belongs_to_many :users
/app/controllers/items_controller.rb
def add_to_cart
@item = Item.find(params[:id])
@user = current_user
@user.items << @item
render 'show'
end
def remove_from_cart
@item = Item.find(params[:id])
@user = current_user
@user.items.delete(@item)
render 'show'
end
/app/views/items/show.rb
<tr>
<% if user_signed_in? then %>
<% if !current_user.items.include?(@item)then %>
<%= button_to "Add to Cart", add_to_cart_path(:id => @item.id) %>
<% else %>
<%= button_to "Remove from Cart", remove_from_cart_path(:id => @item.id ) %>
<% end %>
<% end %>
</tr>
/config/routes.rb
post '/items/:id/add_to_cart' => 'items#add_to_cart', :as => 'add_to_cart'
post '/items/:id/remove_from_cart' => 'items#remove_from_cart' , :as => 'remove_from_cart'
[カートに追加] ボタンをクリックすると、アイテムがカートに追加され、アイテム表示ページに残りますが、URL が変更されます。
http://localhost:3000/items/2
に
http://localhost:3000/items/2/add_to_cart
どうすれば同じままでいられるのでしょうか?また、代替の解決策があれば教えてください。