2014-02-02 3 views
0

У меня есть поле orde на одной из моих моделей, эта модель также имеет is_milestone? метод, который возвращает true или false в зависимости от того, является ли заказ либо 50-й, либо 100-й вехой.Метод Rails Model в активном запросе

Я хочу выбрать все элементы, которые являются вехами, но это можно сделать, используя is_milestone? метод?

я в настоящее время:

@milestones = Model.where(:is_milestone?).order('order ASC') 

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

Любые мысли?

ответ

1

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

Единственный способ, с помощью которого вы сможете это сделать, - создать в вашей модели атрибут is_milestone и сохранить в базе данных значение boolean. Возможно, вы можете заполнить это значение с помощью обратного вызова after_save, который подсчитал вехи и установил значение true, если он был либо 50-м, либо 100-м.

+0

Правильно, имеет смысл. Вместо этого переходим к новому полю в маршруте базы данных. Благодаря! – rctneil

+0

Я добавил следующее, но поле не устанавливается в моей БД. Есть идеи? after_save do | запись | record.is_milestone = true, если record.is_milestone? end – rctneil

+0

'is_milestone?' - это метод, который рельсы будут динамически добавлять к вашей модели, потому что вы определили его как логический атрибут. Вы должны скорее протестировать экземпляр непосредственно в своем обратном вызове или создать новый метод с уникальным именем, чтобы выполнить этот тест для вас. – Jon

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