技术知识
在heroku报错如何查看错误?
可以在iterm里面用命令“heroku log”查看错误如何用“作弊”的手法新建admin?
可以先在migration改栏位(新建一个migration,change_column,记住不是add_column),将is_admin的default改为true。这样新注册的用户就都是admin了。
之后再改栏位,将default改回来。方法同上。
ps:因为是部署到heroku,所以执行完操作后都要记得push到heroku,当设计资料库变更时,还要运行heroku run rake db:migrate
controller里面加不加@的问题
加@是要在view里引用的情况,如果是只在controller里面直接调用,不用加@订单管理的!和?
有限状态机里面的动作(如取消)都需要加!
,因为都是改变自身的状态。
如果是返回是true或者false的后面一定要加?
注意:
①有限状态机的“取消”只能取消一次,不能重复取消。
②有限状态机是有存在逻辑的,from···to···,这个需要注意一下-
发送邮件的一个问题
在rails c中,发送文件的命令是这样的OrderMailer.notify_order_cancelled(Order.last).deliver!
,而在controller里面要改一下。def cancel @order = Order.find(params[:id]) OrderMailer.notify_order_cancelled(@order).deliver! @order = @order.cancell_order! redirect_to :back end
Order.last
改成了@order
。理由:在rails c中,Order.last
是去取最近的一个order,而在controller中,因为已经找到order并且赋值到变数@order了,所以直接引用@order就可以了。 -
发送邮件的另一个问题
def cancel @order = Order.find(params[:id]) OrderMailer.notify_order_cancelled_by_admin(@order).deliver! @order = @order.cancell_order! redirect_to :back end
OrderMailer.notify_order_cancelled_by_admin(@order).deliver!
这行代码不能放在@order = @order.cancell_order!
后面,因为@order = @order.cancell_order!
有一个取消订单的动作,所以不合逻辑。发出邮件这个指令应该直接跟在找到order并赋值到@order这行命令下面。 -
加标签进行有限状态机管理订单的方法
最重要的是orders_helper.rb里面的这段代码。有两种方法可以使用(其实用hash也可以)。
第一种:def render_order_state(order) case order.aasm_state when "order_placed" content_tag("span","已下单", class:"label label-default") when "paid" content_tag("span","已支付", class:"label label-default") when "shipping" content_tag("span","发货中", class:"label label-default") when "shipped" content_tag("span","已发货", class:"label label-default") when "order_cancelled" content_tag("span","已取消", class:"label label-default") when "good_returned" content_tag("span","已退货", class:"label label-default") end end
第二种:
def render_order_state_if(order) if order.paid? content_tag("span", "已支付", class:"label label-default") elsif order.order_placed? content_tag("span", "已下单", class:"label label-default") elsif order.shipping? content_tag("span", "发货中", class:"label label-default") elsif order.shipped? content_tag("span", "已发货", class:"label label-default") elsif order.order_cancelled? content_tag("span", "已取消", class:"label label-default") elsif order.good_returned? content_tag("span", "已退货", class:"label label-default") end end