1

一个公司模型有很多标签并且有一个 country_id 字段。我想找到:

  1. 所有公司,位于某个县
  2. 所有位于某个县并具有特定标签if params[:tag]的公司都存在。

第一个查询很简单

 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>
4

2 回答 2

1

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

如果您替换为,它应该可以Company.all工作Company.where

于 2012-09-07T01:42:40.423 回答
0

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

于 2012-09-05T14:46:41.037 回答