在Ruby on Rails中搜索子模型

时间:2012-09-05 14:35:00

标签: ruby-on-rails ruby ruby-on-rails-3.2

公司模型有许多标记,并且有country_id字段。我想找到:

  1. 所有公司,位于某个县
  2. 所有公司位于某个县,并且有一个标记if params[:tag]
  3. 第一个查询非常简单

     Company.where(:country_id => params[:country_id])
    

    至于第二个,我尝试了一些查询而没有任何效果

    companies = Company.where(:country_id => params[:country_id])
    companies = Company.tags.where(:name=> params[:tag])
    undefined method `tags' for #<Class:0x000000055dfb60>
    

    如果我把

    Company.tags.where(:name=> params[:tag])
    

    然后错误是相同的

    undefined method `tags' for #<Class:0x000000055dfb60>
    

    在Rails控制台中,命令Company.first.tags会收到所有标记。

    更新:这有效

    Company.joins(:tags).where("tags.name = ?", query_hash[:tag]) 
    

    但我还不明白如何做这样的事情

     my_conditions = get_search_conditions
     if query_hash[:tag].present?
        companies = Company.all(:conditions => my_conditions).joins(:tags).where("tags.name = ?", query_hash[:tag]) 
     else
        companies = Company.all(:conditions => conditions) 
     end
    

    错误是

    undefined method `all' for #<Array:0x007fbec8063e00>
    

2 个答案:

答案 0 :(得分:1)

  

错误为undefined method all for #<Array:0x007fbec8063e00>

如果将Company.all替换为Company.where

,它应该有效

答案 1 :(得分:0)

检查这是否有效 - Company.joins(:tags).where(“tags.name”,params [:tag])