想要计算优惠券在交易中使用的次数。但是每当我使用计数时,我都会得到undefined method 'count' for 0:Fixnum
所以我的桌子有:
def change
create_table :coupons do |t|
t.string :code
t.string :applies_to
t.decimal :amount_off, precision: 8, scale: 2
t.integer :percent_off
t.integer :max_redemptions
t.integer :used, :default => 0
t.datetime :redeem_by
t.boolean :active, default: true
t.timestamps null: false
end
end
然后在我看来:
<% @coupons.each do |coupon| %>
<%= coupon.code %>
<%= coupon.used %>
<% end %>
当我使用<%= coupon.used.count %>
时,我收到了上述错误。
我尝试过多种变体,包括:
<%= coupon.count(:used) %>
导致:未定义的方法
`计数&#39 ;;
<%= coupon.group(:used).count %>
导致:undefined method
'group'
。
我也尝试过:<%= coupon.includes(:used).inject(0) {|sum, c| sum +
c.used.count}%>
。最后得到undefined method 'includes'
。
<%= coupon.used.inject(0) {|sum, c| sum + c.used}%>
导致undefined method
注入&#39; 0:Fixnum` 那么......如何获得优惠券使用的总次数?
编辑:显然它没有增加。我将控制器更新为:
def index
@coupons = TbCommerce::Coupon.ordered.paginate(:page => params[:page])
if params[:search]
@coupons = @coupons.search(params[:search])
end
@coupons.increment!(:used)
respond_with @coupons
end
这有效......有点儿。看起来它只是应用于页面加载的次数而不是它被使用的次数。
进一步审查: 因此,看起来之前的开发人员确实应用了增量,它只是没有应用。验证具有以下内容:
def increment_coupon_used
coupon.increment_used! if coupon.present?
return true
end
然后模型有:
def increment_used!
update(:used => used + 1)
end
我试图更新increment_used! to update_attributes(:used =&gt; used +1)无济于事。
答案 0 :(得分:0)
由于used
是Coupon
上的整数列,您只需调用:
<%= coupon.used %>
答案 1 :(得分:0)
如果我理解您的要求,那么您尝试使用coupon
的次数。所以,我的回答是;
Coupon.group(:code).sum(:used)
由于您试图了解代码使用coupon
的次数并猜测used
列存储了您使用它的次数,因此您应该sum
而不是count
。
答案 2 :(得分:0)
问题似乎是你试图注入一个整数值,这是不正确的。为什么不简单地打印 coupon.used
这就是你想要的。不要在整数上尝试内核类注入方法,它基本上用于整数集合,如数组。