在rails中实现Toggle按钮

时间:2013-11-04 21:39:28

标签: ruby-on-rails

我正在亚马逊网站上工作。

如果项目不在购物车中,它会为登录用户(在项目显示页面上)选项将项目添加到购物车。用户点击“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'

虽然点击“添加到购物车”按钮,该商品会添加到购物车中并保留在商品展示页面上,但会更改网址

http://localhost:3000/items/2

http://localhost:3000/items/2/add_to_cart

知道怎么能保持不变? 另外,如果有任何其他解决方案,请告诉我。

0 个答案:

没有答案