Rails 4加入查询

时间:2014-10-21 05:44:11

标签: ruby-on-rails

我正在轨道上构建一个市场应用程序4.我有一个卖家小部件,在我们的平台上显示随机的卖家列表。有时,卖家'商品已过期,因此他们没有任何待售商品。我想排除这些卖家出现在小工具中。

我有一个用户模型(用户可以是买家或卖家)。卖家有个人资料描述和形象,而买家则没有。因此,要创建窗口小部件,我使用以下查询。

<% User.where("profileimage_file_name != ? AND profilestory != ?", "", "").order("random()").limit(12).each do |user| %>
#some code to link to seller page
<% end %>

我有一个Listing模型,它存储所有产品列表,并将user_id作为外键。

用户模型没有任何列表数据。如何编写查询,以便我可以将用户模型加入列表模型,并仅显示至少有1个列表处于活动状态的用户。

1 个答案:

答案 0 :(得分:1)

有两种方法可以做到这一点:

@sellers = User.where("profileimage_file_name != ? AND profilestory != ?", "", "").
                joins(:listing).
                where("listings.created_at <= (created_at + INTERVAL 30 day) ").
                order("random()").limit(12)

更清洁的方式:

class User < ActiveRecord::Base
    default_scope -> { order("random()")} # this is optional
    scope :sellers, -> { where("profileimage_file_name != ? AND profilestory != ?", "", "") }
    scope :with_active_listings, -> { joins(:listing).where("listings.created_at <= (created_at + INTERVAL 30 day) ")}

    ...
end

然后简单地说:

@sellers = User.sellers.with_active_listings.limit(12)

这些是一般性的,并对您的系统做了一些假设,但希望它足够有意义。让我知道这是否有帮助。