Как в Rails подсчитать, сколько раз элемент был использован? - PullRequest
0 голосов
/ 16 мая 2018

Хотите подсчитать количество раз, которое купон используется в транзакциях.Однако всякий раз, когда я использую счет, я получаю 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) безрезультатно.

Ответы [ 3 ]

0 голосов
/ 16 мая 2018

Если я правильно понимаю ваш запрос, вы пытаетесь узнать, сколько раз coupon используется.Итак, мой ответ будет:

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

Поскольку вы пытаетесь узнать, сколько раз один coupon используется кодом, и угадываете в столбце used, сколько раз вы его использовали,у вас должно быть sum вместо count.

0 голосов
/ 18 мая 2018

Проблема выглядит так, как будто вы пытаетесь ввести целочисленное значение, что неверно.Почему бы вам просто не напечатать coupon.used

Это то, что вы хотите.Не пытайтесь использовать метод класса ядра inject вместо целого числа, он предназначен для сортировки целых чисел, таких как array .

.
0 голосов
/ 16 мая 2018

Поскольку used - это целочисленный столбец на Coupon, вы просто позвоните:

<%= coupon.used %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...