根据单列中存在的单词计数在rails中排序

时间:2014-04-15 07:32:02

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

我有一个名为Vendor的模型。我有三种不同的模型。

  1. 证言
  2. 服务
  3. 作品
  4. 我必须查找每个表并列出供应商(限制5),这些供应商在其中一个模型的列中具有“example”一词的最多次。我如何在rails中执行此操作?


    我有类似的东西

    Vendor.joins(:testimonials).where("testimonials.content LIKE ?","%example%")
    

    我需要找到具有“example”

    这个词的最大出现次数的供应商

3 个答案:

答案 0 :(得分:1)

我希望我现在能帮到你:

a=[]
vendors.each do |v|
  c=0
  c=v.testimonial.scan(/example/).count
  if c>0
  a=a.concat([{vendor: v, counts: c}])
end

答案 1 :(得分:0)

在Ruby中,您可以通过这种方式计算字符串中子字符串的出现次数,例如

s = "this is a string with an example, example, example"
s.scan(/example/).count  # => 3

答案 2 :(得分:0)

这就是我最终做到这一点的方式。不确定我的问题是否被正确询问。我是在@ user3383458

之前的回答的帮助下完成的
vendor = Hash.new
        Vendor.all.each do |v|
            testi_word_count = 0
            service_word_count = 0
            title_word_count = 0
            v.testimonials.each do |testi|
                testi_word_count += testi.content.scan(/#{word_to_search}/).count
                Rails.logger.info "testi_word_count"
                Rails.logger.info testi_word_count
            end
            v.services.each do |service|
                service_word_count += service.name.scan(/#{word_to_search}/).count
                Rails.logger.info "service_word_count"
                Rails.logger.info service_word_count
            end
            v.works.each do |work|
                title_word_count += work.title.scan(/#{word_to_search}/).count
                Rails.logger.info "title_word_count"
                Rails.logger.info title_word_count
            end
            vendor[v]=testi_word_count + service_word_count + title_word_count
        end