我正在开发以下应用程序http://secure-cove-9193.herokuapp.com/
Github:https ://github.com/gatosaurio/show_action_broken
这是我的模型:
class Customer < ActiveRecord::Base
attr_accessible :name, :street
has_many :carts, :dependent => :destroy
has_many :line_items
end
class Product < ActiveRecord::Base
attr_accessible :name, :price
end
class Cart < ActiveRecord::Base
belongs_to :customer
has_many :line_items, :dependent => :destroy
attr_accessible :purchased_at
end
class LineItem < ActiveRecord::Base
attr_accessible :cart, :cart_id, :product, :product_id, :quantity, :unit_price
belongs_to :cart
belongs_to :product
def full_price
unit_price * quantity
end
end
我也在使用嵌套资源,如下所示:
resources :products
resources :customers do
resources :carts
resources :line_items
end
这是我在 ApplicationController 中的内容
class ApplicationController < ActionController::Base
protect_from_forgery
helper_method [:current_cart, :new_session]
protected
def current_cart
session[:cart_id] ||= Cart.create!.id
@current_cart ||= Cart.find(session[:cart_id])
end
def new_session
if action_name == 'new'
@current_cart = nil
else
session[:cart_id] = nil
current_cart = @current_cart
end
end
end
所以我在那里创建或找到一个 session[:cart_id] 对象并将其存储在 current_cart 方法中,但是每次我需要创建一个新的 Cart 对象时,我都需要重置该会话,我在 new_session 方法上执行此操作,我通过了一个 after_filter 到 CartsController。
在 carts#new 中,我有两个表格,一个列出产品,每个都有一个“添加到购物车”链接,另一个表格列出给定购物车的现有订单项。
<table>
<thead>
<tr>
<th>Name</th>
<th></th>
</tr>
</thead>
<tbody>
<% @products.each do |product| %>
<tr>
<td><%= link_to product.name, product_path(product) %></td>
<td><%= form_tag(customer_line_items_path, :method => "post") do %>
<%= hidden_field_tag(:product_id, product.id) %>
<%= submit_tag("Add to Cart") %>
<% end %></td>
</tr>
<% end %>
</tbody>
</table>
<table>
<tr>
<th>Product</th>
<th>Qty</th>
<th>Unit Price</th>
<th>Full Price</th>
</tr>
<% @current_cart.line_items.each do |line_item| %>
<tr>
<td><%= line_item.product.name %></td>
<td class="qty"><%= line_item.quantity %></td>
<td class="price"><%= number_to_currency(line_item.unit_price) %></td>
<td class="price"><%= number_to_currency(line_item.full_price) %></td>
</tr>
<%= @current_cart.line_items.count %>
<% end %>
</table>
<%= form_tag(customer_carts_path, :method => "post") do %>
<%= hidden_field_tag(:customer_id) %>
<%= submit_tag("Create Cart") %>
<% end %>
到目前为止一切正常,但这是我的问题:我应该将哪些实例变量传递给 carts#show?我的意思是,不再是current_cart。我可以显示购物车客户的姓名
def show
@customer = Customer.find(params[:customer_id])
end
并像这样打印:
<%= @customer.name.capitalize %>
但是,我只是不知道用于检索与任何给定特定客户的购物车关联的所有行项目的 Active Record 命令
嘿,我很抱歉,我知道这太长了,但必须说明我的情况。
谢谢 :)