2012-03-05 6 views
1

Я имею дело с многочисленными расчетами, чтобы привести различные значения в пределах модели к простому ИСТИНО или ЛОЖЬ. Проблема в том, что эти вычисления довольно интенсивные, а не то, что я хочу, чтобы создать длинный, трудный для выполнения SQL-запрос. Я предпочел бы просто провести весь расчет в рамках метода, который может проверить модель при возврате записей.Rails 3, Методы модели/Вычисляемые атрибуты

Я пробовал множество способов сделать это, и, глядя на другие подобные подвиги, другие подталкивают newbs как я к SQL, который может служить большинству целей, но не будет служить мне, поскольку выполняемые вычисления несколько внешнее по отношению к модели ,

Модель:

class Quality < ActiveRecord::Base 
... 
def passed_inspection 
    [code that calculates based on values in model] 
end 

Контроллер:

@records = Quality.where('passed_inspection = true') 

Вид:

Did pass inspection?: <%= record.passed_inspection %> 
+0

вы можете разместить пример расчетов, которые вы пытаетесь? – ScottJShea

+0

В чем проблема с вашей помощью? Если вы не хотите, чтобы длинный оператор SQL использовал код, метод модели. Если вы не хотите вводить код вычисления в класс модели, тогда создайте вспомогательный метод контроллера, который принимает в качестве входных данных модель и возвращает TRUE или FALSE. –

+0

@MatteoMelani У меня уже есть вычисления, представленные как помощники вида, но мне также нужно извлекать записи на основе pass/fail. Например, у меня есть представление, которое выводит только неудачные записи в таблицу. – Nick

ответ

7

Это звучит как решение вашей проблемы было бы использовать Scope с Метод класса по h elp очистит вашу модель. По существу, вы создали модель, как это:

class Quality < ActiveRecord::Base 
    def self.passed_inspection 
     # Code that does your calculations 
    end 

    scope :passed, passed_inspection() # This needs to be below the function above 
end 

Тогда вы могли бы получить эти данные, называя его как этот

@records = Quality.passed 

Существует а рельсы, брошенные об этой проблеме, если вам нужна дополнительная информация: RailsCast #215 Advanced Queries

Edit: Исправлены некоторые ужасные грамматики

+0

Если бы я мог еще вам помочь, я бы! Большое спасибо. Это в основном то, что мне нужно. – Nick

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