在 rails 上链接到 ruby 中的 basket/cart

Linking to basket/cart in ruby on rails

我的页眉中有一个菜单,其中有一个展示篮和一个登录按钮,当代码分别放置时,每个都可以工作,但当两行都在文件中时,它们就不会工作。 我正在为用户使用设计。 有没有更好的方法link到当前篮子?

<li><%= link_to basket_path(@basket.id) do %>
  <%= image_tag "/assets/viewBasket.png" %>
</li>
<% end %>
<% if signed_in? %>
  <li><%= link_to edit_user_registration_path do%>
    <%= image_tag"/assets/my_account.png" %></a></li>
  <% end %>
  <li><%= link_to destroy_user_session_path do%>
    <%= image_tag"/assets/logout.png" %></li>
  <%end%>
<% else %>
  <li><%= link_to new_user_session_path do%>
    <%= image_tag"/assets/loginRegisterBtn.png" %></li>
  <% end%>
<% end %>

如果我 运行 单独使用,则此方法有效,但不适用于后面的代码。

<li><%= link_to basket_path(@basket.id) do %>
  <%= image_tag "/assets/viewBasket.png" %></li>
<% end %>

我认为这与在 current_basket 模型中使用会话 ID 设置当前篮子的方式有关。

module CurrentBasket
private 
  def set_basket
    @basket = Basket.find(session[:basket_id])
    rescue ActiveRecord::RecordNotFound
    @basket = Basket.create
    session[:basket_id] = @basket.id
  end
end

<li>的结束必须在link结束之后,像这样:

<li>
  <%= link_to basket_path(@basket.id) do %>
    <%= image_tag "/assets/viewBasket.png" %>
  <% end %>
</li>

我使用上面的答案帮助解决了一个问题,但是,我发现我只定义了商店和索引页面。删除它,它现在可以工作了。

 include CurrentBasket
 before_action :set_basket, only: [:index, :shop]