2013-12-02 3 views
6

Прежде всего позвольте мне объяснить пример:Можно просмотреть вызов некоторых методов модели в Rails?

В Модель:

class Product < ActiveRecord::Base 
    has_many :line_items 

    def income 
    self.line_items.sum(:price) 
    end 

    def cost 
    self.line_items.sum(:cost) 
    end 

    def profit 
    self.income - self.cost 
    end 
end 

Затем в контроллер:

def show 
    @products = Product.all 
end 

И в Вид:

<% @products.each do |product| %> 
Product Name: <%= product.name %> 
Product Income: <%= product.income %> 
Product Cost: <%= product.cost %> 
Product Profit: <%= product.profit %> 
<% end %> 

Хорошая практика - позвонить модель методы из вид?

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

С другой стороны, некоторые другие говорили, что не вызывайте методы класса или какой-либо метод обновляет БД из представления, но вы можете получить доступ к любому методу, который извлекает данные только.

Значит, этот код является хорошей практикой?

ответ

3

Поскольку ваши методы должны получить доступ к line_items ассоциации, чтобы избежать N +-проблему и вызова DB запросов с точкой зрения, я бы советом выборки ваших line_items в show действий с includes:

def show 
    @products = Product.includes(:line_items) 
end 

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

+0

На самом деле, мне не нужно загружать объекты позиций. Однако мне просто нужно сделать сумму в запросе. –

8

Его прекрасно подходит для вызова объектных методов/атрибутов из представления, если вызов не изменит данные. Я имею в виду, читатели/получатели звонков. Плохая практика заключалась бы в вызове/вызове методов, которые обновляют/удаляют данные. Не вызывайте сеттеры.

Также, если есть какие-либо сложные вычисления, обратитесь к помощникам.

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