ruby - 如何更改通过简单表单存储集合的方式?
问题描述
我想返回一个视图,用户的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
解决方案
推荐阅读
- excel - 用条件计算表中的单元格 - VBA
- r - 在 R 中对谷歌进行网页抓取时获取链接
- java - 在 Spring Integration 5 上使用 Spring Integration Java DSL 在入站通道上配置目录扫描器
- php - 在 MySQL UPDATE 中使用 AND
- java - 在java中,每个类如何在不使用extends关键字的情况下从Object类继承?
- agens-graph - AgensGraph 1.3 版双引号中的强制转换是什么
- php - 用于 GREP 或 FINDSTR 的 PHP 函数
- reactjs - React-Native Firebase 部署错误命令 Cli
- python - python的隶属函数是如何工作的?
- wpf - Ranorex 找不到 WPF Expander 的自动化 ID