<ActiveRecord :: QueryMethods :: WhereChain ошибка в работающей области - PullRequest
0 голосов
/ 09 января 2019

Некоторое время я успешно выполнял фрагмент кода, но он только что начал выдавать ошибку - мы изменили способ, которым данные поступают в базу данных, но полагаем, что это скорее проблема программирования, или я изменил его по ошибке, но не вижу где.

Похоже, что проблема вызвана областью, мы запускаем Rails 4.2.2

Полная ошибка

undefined method `call' for 
 ActiveRecord::QueryMethods::WhereChain:0x007feb8f5c49f0> Did you mean? caller

app/controllers/orders_controller.rb:158:in `weekly_sales_report'

в моей строке orders_controller 158

@sales_this_week_bysales = Order.select("COUNT(order_id) AS nosales, AVG(net_amount) AS avgsale,SUM(sale_cost) AS sale_cost, SUM(net_amount) AS weeklysalestotal, owner_id AS salesman").sales.where.(date_of_sale: (@startdate .. @enddate)).with_salesman.group(:owner_id)

в моей модели orders.rb у меня есть следующие используемые области применения

scope :with_salesman, -> { joins(:pipe_records).where(pipe_records: {pipe_part_id: 1}).where.not(pipe_records: {owner_id: nil}) }

scope :sales, -> {where ("orders.order_ref <>'' and date_of_sale IS NOT NULL ")}

Я переписал область действия ниже, но все еще получил ту же ошибку

scope :with_salesman, -> { joins(" INNER JOIN pipe_records ON pipe_records.order_id = orders.id WHERE pipe_records.pipe_part_id =1 AND pipe_records.owner_id <>'' ") }

Я также удалил критерии начальной даты WHERE из sales.where на 158, который возвратил другую ошибку, но кажется, что область больше не проходит правильно или возвращает ошибку из-за плохих записей ??

Теперь я не уверен, что происходит, я вернулся к своим пультам и взял копию кода пару дней назад, и это также вызвало ту же ошибку, но она работала правильно. В последнее время мы добавили много новых записей с помощью новой формы, которая обходит и изменяет даты, которые могут быть виноваты. Буду признателен за любые предложения или свежие глаза.

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Просто удалите точку между where и круглыми скобками.

where.(date_of_sale: (@startdate .. @enddate))

В ruby

receiver.()

- это короткая рука для receiver.call(), поэтому вы получаете ошибку

0 голосов
/ 09 января 2019

Вы, вероятно, хотите удалить этот период после where:

where.(date_of_sale: (@startdate .. @enddate))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...