Хотите подсчитать количество раз, которое купон используется в транзакциях.Однако всякий раз, когда я использую счет, я получаю 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) %>
, что приводит к: undefined метод `count ';
<%= 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
inject 'для 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!для update_attributes (: used => used +1) безрезультатно.