在Rails中,我如何计算项目的使用次数?

时间:2018-05-16 14:24:39

标签: ruby-on-rails

想要计算优惠券在交易中使用的次数。但是每当我使用计数时,我都会得到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)无济于事。

3 个答案:

答案 0 :(得分:0)

由于usedCoupon上的整数列,您只需调用:

<%= coupon.used %>

答案 1 :(得分:0)

如果我理解您的要求,那么您尝试使用coupon的次数。所以,我的回答是;

Coupon.group(:code).sum(:used)

由于您试图了解代码使用coupon的次数并猜测used列存储了您使用它的次数,因此您应该sum而不是count

答案 2 :(得分:0)

问题似乎是你试图注入一个整数值,这是不正确的。为什么不简单地打印 coupon.used

这就是你想要的。不要在整数上尝试内核类注入方法,它基本上用于整数集合,如数组