Разная реализация по ROR - PullRequest
1 голос
/ 04 августа 2010

Я делаю очень простой сайт с ROR.

class Product < ActiveRecord::Base

    belongs_to  :category

    has_many    :photos

    has_many    :ordered_photos,
                :class_name => 'Photo',
                :order => 'name'

    has_one     :random_photo_1,
                :class_name => 'Photo',
                :order => 'RAND()'

    def random_photo_2

        Photo.find(:first, :conditions => { :product_id => self.id }, :order => 'RAND()')

    end

end

Во время реализации многих классов ActiveRecord я сомневаюсь, что не понимаю, в чем отличие реализации random_photo_1 от метода random_photo_2.

P.S. Я извиняюсь за мой английский.

1 Ответ

4 голосов
/ 04 августа 2010

Они оба будут выполнять одну и ту же работу.

Преимущество: random_photo_1 заключается в том, что вы можете легко загружать все ассоциации "случайных фотографий" всякий раз, когда вы находите несколько продуктов, которые действительно повышают производительность.если вы собираетесь показывать большое количество товаров и случайное их фото на вашем видении.

#:include will eagerly load the associations
@products = Product.find(:all, :include => :random_photo_1)

Затем, когда вы повторяете для своего просмотра значение @products, если вы делаете:

@products.each do |product|
   #This will not do a new select against the database
  <%= product.random_photo_1 %>
end
...