查找匹配项Tindr样式-可以批准或拒绝匹配项的2个用户配对

量子马铃薯

我正在建立一个Users通过Approval模型相互匹配的约会网站,并按ranking值进行过滤

Approval可以为任意一对创建1 Users下面的代码最初可以工作,但是有一个严重的缺陷:它只找到第一个N可能的匹配项,方法N的第一行是20 User#potential_matches

在此潜在匹配项列表中,我排除Approvals了已经matched或的任何项denied_at

我正在寻找找到匹配项的有效方法Users

我可以从用户ID 1开始并进行迭代-但这效率很低。

理想情况下,我想Approval基于User.id-过滤模型-如果存在Approval带有user_id10且非零user1_approval值的,则不应将其显示给用户ID10。将为用户显示approved_id

user_id之间的区别approved_id只是与2个不同的用户配对。在中创建之前,会先按名称对它们进行排序Approval.user_approval

如何有效地UsersApproval模型模型配对

class Approval < ActiveRecord::Base
    belongs_to :user
    belongs_to :approved, class_name: "User"

    def self.user_approval(user1, user2)
        sorted = [user1, user2].sort_by { |u| u.name}
        Approval.find_or_create_by(user: sorted[0], approved: sorted[1])
    end

架构:

create_table "approvals", force: :cascade do |t|
    t.integer  "user_id"
    t.integer  "approved_id"
    t.datetime "created_at",         null: false
    t.datetime "updated_at",         null: false
    t.datetime "user1_approval"
    t.datetime "user2_approval"
    t.datetime "denied_at"
    t.boolean  "approved"
    t.boolean  "matched"
  end


User.rb:

  def self.potential_matches(user)
    users = user.where('ranking >= ? AND ranking <= ? AND id != ?', user.lowest_eligible_ranking ,
                                                   user.maximum_eligible_ranking,
                                                   user.id).limit(20)
    approvals = []
    users.each do |s|
      approvals.push(Approval.user_approval(user, s))
    end

    approvals.reject! { |a| a.denied_at != nil}
    approvals.reject! { |a| a.matched == true}

    approvals
  end
量子马铃薯

解决的办法是取消Approval模型并改用Decision模型-批准或拒绝的“票数”为一个。

它使查找更加容易。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Google Apps脚本:查找所有匹配项并设置样式

来自分类Dev

Vlookup查找匹配项

来自分类Dev

查找最具体的匹配项

来自分类Dev

显示查找匹配项的数量

来自分类Dev

awk在2个文件中查找不匹配项

来自分类Dev

MySQL查询以查找2个表之间的匹配项

来自分类Dev

根据匹配条件从 5 个列表中查找匹配项

来自分类Dev

从2个范围中查找匹配项并将匹配项替换为特定值,是否有优化的方法?

来自分类Dev

遍历用户模型中的数组以查找匹配项

来自分类Dev

lodash _。查找所有匹配项

来自分类Dev

在SQL语句中查找不匹配项

来自分类Dev

查找相同的MYSQL表之间的匹配项

来自分类Dev

jQuery查找具有多个匹配项

来自分类Dev

在NSDate数组中查找匹配项-Swift

来自分类Dev

在JSON数组中查找匹配项

来自分类Dev

在SQL中查找最匹配的项

来自分类Dev

递归SQL查询以查找匹配项

来自分类Dev

查找数组匹配项并删除元素

来自分类Dev

在php中的数组中查找匹配项

来自分类Dev

查找相邻行上的匹配项

来自分类Dev

Linq到实体:查找匹配项

来自分类Dev

查找没有IF语句的匹配项?

来自分类Dev

在NSDate数组中查找匹配项-Swift

来自分类Dev

查找多个CSV文件之间的匹配项

来自分类Dev

在 C++ 中查找匹配项

来自分类Dev

循环遍历列以查找匹配项 - VBA

来自分类Dev

JavaScript:使用 .exec() 查找连续匹配项

来自分类Dev

匹配多列时查找重复项

来自分类Dev

通过复杂的属性组合查找匹配项