1

我想从模型中获取“current_item.quantity”以在视图中使用 - 即我希望能够将“当前在您的购物车中的 (x) 个项目”放在应用程序布局视图中。我该怎么做呢?尝试了我能想到的“@total_current_items”等的每一种组合。谢谢!!

如果有帮助,这是模型代码:

class Cart < ActiveRecord::Base

has_many :line_items, dependent: :destroy

def add_product(product_id)
  current_item = line_items.find_by_product_id(product_id)
  if current_item
    current_item.quantity += 1
  else
    current_item = line_items.build(:product_id => product_id)
    current_item.price = current_item.product.price
  end
  current_item
end

def total_price
  line_items.to_a.sum { |item| item.total_price }
end

def decrease(line_item_id)
  current_item = line_items.find(line_item_id)
  if current_item.quantity > 1
    current_item.quantity -= 1
  else
    current_item.destroy
  end
  current_item
end

def increase(line_item_id)
  current_item = line_items.find(line_item_id)
  current_item.quantity += 1
  current_item
end
end

根据要求,这是视图代码(相关部分):

<% if @cart %>
<%= hidden_div_if(@cart.line_items.empty?, id:'cart') do %>
<div class="row-fluid">
        <a class="btn btn-success menu" id="menubutton" href="<%= cart_path(session[:cart_id]) %>">View Cart</a>
                </div>
                <div class="row-fluid"> 
                You have <%= pluralize(@total_current_items, "item") %>in your cart.    
                </div>

                <% end %>           
            <% end %>
</div>

编辑:

我尝试将以下内容放入应用程序帮助程序中,但它不起作用。它要么出现未定义的方法/变量错误消息,要么显示“您的购物车中有 0 件商品”,即使那里有商品也是如此。我已经尝试将@total_items、total_items 等放在视图中引用它,但我是 Rails 新手,不知道该怎么做才能让它工作!

 def total_items
   @line_items = LineItem.find(params[:id])
   @total_items = @line_items.to_a.sum { |item| item.total_quantity}
 end

我哪里错了?

4

3 回答 3

1

正如 Nils 指出的那样,您必须分配@total_current_items(在您的控制器中)以便您可以访问它。现在查看您的视图代码,我猜您在@cart.

成员变量@cart(成员变量,因为它有一个@)在您的控制器中分配。您也可以在视图中访问控制器中分配的成员变量。

您想了解有多少 line_items 附加到购物车。您已经在检查购物车中是否有任何 line_items(否则您将不会显示您想要实现的目标)。因此,不要检查您的数组是否为空。尝试获取数组的长度,即当前存在于您的购物车中的 line_items 的数量。

于 2012-06-22T05:50:53.470 回答
1

这是部分答案,但注释不能真正有代码块:

您应该将代码分配@codetotal_current_itemsinApplicationController作为受保护的方法。然后将其用作 before_filter,以便该方法将在每个控制器(页面)之前运行

class ApplicationController < ActionController::Base
  before_filter :get_cart    

  protected
  def get_cart
    @cart = SOMETHING
    @total_current_items = SOMETHING
  end
end

before_filter - http://guides.rubyonrails.org/action_controller_overview.html#filters

于 2012-06-22T11:33:54.443 回答
0

您需要total_current_items在您的控制器中分配它才能在您的视图中使用。

cart如果也没有设置,也一样。

于 2012-06-21T16:58:39.033 回答