1

会社モデルには多くのタグがあり、country_id フィールドがあります。私は見つけたい:

  1. 特定の郡にあるすべての企業
  2. 特定の郡にあり、特定のタグを持つすべての企業if params[:tag]が存在します。

最初のクエリは非常に簡単です

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

2つ目については、いくつかのクエリを試しましたが、何も機能しませんでした

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 に答える