首页 > 解决方案 > 如何更改通过简单表单存储集合的方式?

问题描述

我想返回一个视图,用户的interest_category 选择至少在 1 个interest_category 上与我自己的 100% 匹配。如果用户在至少 1 个兴趣类别上不匹配,则不应选择他们。

除了 100% 匹配之外,我的视图应该按匹配率排序。

例如,如果我选择了 5 个interest_category 项目,而另一个用户 A至少有 5 个她的 interest_category 项目与我的相同,则这是 100% 匹配。

如果用户 B有 4 个与我相同的兴趣,则这是 4/5 (80%) 匹配。

每个用户都使用简单表单编辑其个人资料。我在这里发布其中的一部分:

<%= f.input :interest_category, collection: ['Reading', 'Tech' ,'Food', 'Mindfullness', 'Sports', 'Parenting', 'Yoga'], input_html: { multiple: true }, include_blank: true, include_hidden: false, label: "Select your interest: "%>

在选择前 3 个选项后,将以下内容存储到数据库中:

"[\"阅读\"、\"科技\"、\"食物\"]"

我已经开始在我的用户控制器上定义一个新方法,称为匹配,它应该具有匹配逻辑来选择我匹配的用户。

有人可以帮助我了解如何继续思考这个问题吗?

已编辑

因此,我能够通过在我的用户控制器上添加一个方法来解决这个问题,并从那里使用 IF 首先定义一个变量,该变量可以让我获得公共元素:

join_categories = match_real_categories & user_real_categories

然后玩弄 .length,计算公共元素与匹配或用户元素之间的比率:

      match_real_categories = match.interest_category.gsub(/[~;:"'<>?#\s\]\\\[]+/, '').split(",")
      user_real_categories = @user.interest_category.gsub(/[~;:"'<>?#\s\]\\\[]+/, '').split(",")
      join_categories = match_real_categories & user_real_categories
      join_length = join_categories.length

      if join_categories.length == 0
        match_value = 0
      elsif match_real_categories.sort == user_real_categories.sort
        match_value = 1
      else
        match_value = join_categories.length.to_f*2 / (user_real_categories.length.to_f + match_real_categories.length.to_f)
      end

标签: rubysimple-form

解决方案


推荐阅读