0

私はアマゾンのようなウェブサイトに取り組んでいます。

アイテムがまだカートにない場合、ログインしたユーザー (アイテム表示ページ) にアイテムをカートに追加するオプションを提供します。ユーザーが「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

どうすれば同じままでいられるのでしょうか?また、代替の解決策があれば教えてください。

4

0 に答える 0