如何检查文本是否包含@username? - 铁路

时间:2016-05-04 14:39:57

标签: ruby-on-rails ruby-on-rails-4

在我在评论控制器中的创建操作中,我想检查评论文本是否包含“@ +用户名”,以便我可以将其添加到我的公共活动中。

if @comment.body.include?('  [HERE]  ')

也许User.all.username.any?

2 个答案:

答案 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表的增长而更好地扩展。