Ruby on rails Rails 4连接查询

Ruby on rails Rails 4连接查询,ruby-on-rails,Ruby On Rails,我正在rails 4上构建一个市场应用程序。我有一个卖家小部件,它在我们的平台上随机显示卖家列表。有时,卖家的物品过期,因此他们没有任何物品可供出售。我想将这些卖家排除在小部件中 我有一个用户模型(用户可以是买家或卖家)。卖家有个人资料描述和图片,而买家没有。为了创建小部件,我使用下面的查询 <% User.where("profileimage_file_name != ? AND profilestory != ?", "", "").order("random()").limit(1

我正在rails 4上构建一个市场应用程序。我有一个卖家小部件,它在我们的平台上随机显示卖家列表。有时,卖家的物品过期,因此他们没有任何物品可供出售。我想将这些卖家排除在小部件中

我有一个用户模型(用户可以是买家或卖家)。卖家有个人资料描述和图片,而买家没有。为了创建小部件,我使用下面的查询

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

#一些代码链接到卖家页面
我有一个列表模型,它存储所有产品列表,并将用户id作为外键


用户模型没有任何列表数据。如何编写查询,以便将用户模型与列表模型连接起来,并仅显示至少有一个列表处于活动状态的用户。

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

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

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

您使用了一个日期字段来保存列表的过期日期,对吗?不,我有一个过期方法,可以在创建日期前30天计算。对不起,是吗?你是说之后吗?例如,如果我查询列表模型,我会执行
Gotcha。您使用的是哪种DBMS(mysql、postgres等)?注意:在看到您使用sqlite之前,我发布了这篇文章。
间隔
部分在该dbms中不存在。问题是计算需要在DB中使用我所展示的方式进行,而不能使用您提到的rails方法。这很好。我掌握了基本语法。我会从这里找到答案。@Paul_Richter我使用的是你在上面发布的查询,但我得到的是重复的。如何插入
独立用户
过滤器?@Moosa尝试将
.uniq
放在查询末尾,应该可以做到这一点。@Moosa刚刚记住,您也可以将
.group(:id)
附加到查询末尾。两者都应该工作得同样好,唯一的区别是如果您使用的是聚合,或者可能是子查询。
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)