2016-11-13 3 views
0

Модель
Материал (имеет arrive_date атрибут: дата)Rails, как получить атрибут из другого контроллера

контроллер
materials_controller,
urgent_controller

В urgent_controller я хочу, чтобы выяснить, все материалы, которые должны быть получены в течение 5 дней, делая это

class UrgentController < ApplicationController 
    def index 
    @materials = Material.where((Time.zone.now.to_date - arrive_date).to_i <= 5) 
    end 
end 

Но urgent_controller не знаю, этот атрибут и показать ошибки

неопределенными локальная переменная или метод `arrive_date» для

Как я могу это исправить? Заранее спасибо.

+0

Можете ли вы включить код, чтобы показать свои контроллеры? Контролерам не нужно знать друг о друге. У 'срочного_контроллера' должен быть свой собственный' arrival_date' определенный, отдельно от 'material_controller'. –

+0

@EricWalker Привет, см. Обновленный код –

+0

Я вижу. Вероятно, вы хотите что-то вроде того, что делается здесь: http://stackoverflow.com/questions/10301400/datetime-arithmetic-in-an-activerecord-query-postgresql. Аналогичный ответ будет для MySQL. Важным моментом является то, что 'come_date', кажется, является столбцом в вашей базе данных, поэтому вы не можете ссылаться на него как на метод Ruby или переменную. –

ответ

1

В этом случае вы должны создать scope в своей модели Material.

scope :last_5_days, -> { where('arrive_date >= ?', 5.days.ago.to_date) } 

Затем вызовите его в контроллере

def index 
    @materials = Material.last_5_days 
end 

Надеется, что это помогает.

Смежные вопросы