第9章
- 使用局部模板。
render :partial => "cart", :object => @cart render :partial => "cart_item", :collection => @cart.items
- 辅助方法的一个示例。
# app/views/layout/stroe.rhtml
<%= hidden_div_if(@cart.items.empty?, :id => "cart") %>
<%= render :partial => "cart", :object => @cart %>
<div>
# app/controllers/store_controller.rb
def hidden_div_if(condition, attributes = {})
if condition
attributes["style"] = "display: none;"
end
attrs = tag_options(attributes.stringify_keys)
"
"
end
第10章
- validates_inclusion_of 方法验证某属性,在指定的列表中存在。防止别人构造不存在的支付方法逃避支付。
PAYMENT_TYPES = [
["Check", "check"],
["Credit Card", "cc"],
["Purchase Order", "po"]
]
validates_inclusion_of :pay_type, :in => PAYMENT_TYPES.map {|disp, value| value}
- 一个向 Order 中填充 Cart 里面订购项目的过程。
# app/controller/stroe_controller.rb
def save_order
@cart = find_cart
@order = Order.new(params[:order])
@order.add_line_items_from_cart(@cart)
if @order.save
session[:cart] = nil
redirect_to_index("Thank you for your order")
else
render :action => :checkout
end
end
# app/models/order.rb
def add_line_items_from_cart(cart)
cart.items.each do |item|
li = LineItem.from_cart_item(item)
line_items << li
end
end
# app/models/line_item.rb
def self.from_cart_item(cart_item)
li = self.new
li.product = cart_item.product
li.quantity = cart_item.quantity
li.total_price = cart_item.price
li
end


















发表留言