第9章
- 使用局部模板。
render :partial => "cart",bject => @cart render :partial => "cart_item", :collection => @cart.items
- 辅助方法的一个示例。
# app/views/layout/stroe.rhtml <%= hidden_div_if(@cart.items.empty?, :id => "cart") %> <%= render :partial => "cart",bject => @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



















发表留言