контроллер
def show
@dailies = Daily.where(store_id: params[:store]).order(created_at: :asc).by_month_year(params[:month],params[:year])
@services = Service.all.order(id: :asc)
end
вид
<%= daily_data_for(params[:store], params[:month], date.day, params[:year], 'starting_safe') %>
вспомогательный
def daily_data_for(store, month, day, year, field)
Daily.where(store_id: store, month: month, day: day, year: year).first().send(field)
end
Я получаю ошибку undefined method 'starting_safe' for nil:NilClass
при попытке отобразить атрибут объекта ActiveRecord в представлении. Я в замешательстве, но это не должно быть равно нулю, потому что, если я удалю .send (поле) из помощника, я получу #<Daily:0x00007fea597aad50>
. Так что это возвращает объект. Затем я проверяю объект Activerecord в представлении:
daily_data_for(params[:store], params[:month], date.day, params[:year], 'starting_safe').inspect
Который отображает #<Daily id: 1030, store_id: 1, created_at: "2018-10-01 18:20:07", updated_at: "2018-10-01 18:20:07", starting_safe: 0.1e1, ending_safe: 0.1e1, total_in: 0.1e1, total_out: 0.1e1, sum: 0.1e1, starting_drawer: 0.1e1, ending_drawer: 0.1e1, over_short: 0.1e1, year: "2018", month: "10", day: "1">
Он получает правильную запись и возвращает ее, но затем я получаю неопределенный метод класса nil, когда пытаюсь получить доступ к initial_safe.
Почему я не могу отобразить start_safe в представлении? Я хотел бы использовать переменную экземпляра @dailies в помощнике вместо повторного запроса к базе данных, но я получаю те же ошибки. Я пытался в консоли, и все работает отлично. Я немного растерялся относительно того, что здесь происходит.