在我在评论控制器中的创建操作中,我想检查评论文本是否包含“@ +用户名”,以便我可以将其添加到我的公共活动中。
if @comment.body.include?(' [HERE] ')
也许User.all.username.any?
?
答案 0 :(得分:3)
您最好使用ruby regex首先从注释正文匹配模式(_, [head]) ->
中找到用户名,然后使用该用户名查询数据库来查找用户
@abc
或通过传递数组
来搜索具有单个数据库查询的用户@comment.body.scan(/@(\w+)/).flatten.to_a.each do|username|
if User.where(:username => username).any?
# your code here
end
end
这将优化数据库查询,不会将所有用户加载到内存中。
答案 1 :(得分:0)
快速回答:
if User.pluck(:username).any? {|u| @comment.body.include?("@#{u}")}
# ...
end
更好的答案:
为什么不使用javascript库来auto-complete用户名?这更加用户友好,并且随着User
表的增长而更好地扩展。