我的模型有一个复杂的范围,为用户提供满足其参数的活跃交易。
scope :deal_query, lambda { |m, p| where("meal = ? and active = ? and people LIKE '%?%' and inactive_days NOT LIKE '%?%'", m, true, p, Time.zone.now.wday)}
people 列被序列化并存储一个数字数组(使用 LIKE sql 语句搜索序列化列是一种技巧)。然后我将这个数据数组传递给地图!块,它将所有数据呈现在哈希中。
这是该块的精简版。(旁注,我使用 Rails 作为 API,这会返回 json)
Deal.deal_query(params[:meal].to_i, people).map! {|ld| {
:deal_id => ld.id, :title => ld.title, :description => ld.description}}
在块中,我还尝试通过将人员列增加 1 来发送下一个可用交易的名称。我不想在块中运行单独的查询来检查下一个可用交易,这将非常低效,因为它缩放。
有关如何急切加载下一个可用交易的任何建议都会有所帮助。我考虑过创建另一个范围,只需将 people 列增加 1,但后来我不知道如何将它与第一个范围的数据匹配。