ROR的不同实现

时间:2010-08-04 14:34:23

标签: ruby-on-rails performance implementation

我正在制作一个非常简单的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 个答案:

答案 0 :(得分:4)

他们都会做同样的工作。

以下好处: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