2013-05-28 54 views
0

我想做一個搜索過濾器,所有參數都是複選框的名稱,所以他們是數組填充ID值。SQL鏈(連接和wheres) - 紅寶石

@sql_query = '' 

if filters_benefit_type.nil? == false 
    @sql_query = 'id_benefit_type = (:benefit_types)' 
end 

if filters_category.nil? == false 
    if filters_benefit_type.nil? == false 
    @sql_query = @sql_query + ' AND ' 
    end 
    @sql_query = @sql_query + 'id_subcategory = (:company_subcategorys)' 
end 

if filters_zone.nil? == false 
    if filters_category.nil? == false 
    @sql_query = @sql_query + ' AND ' 
    end 
    @sql_query = 'zone = (:zones)' 
end 

@companys = Company 
    .joins(:subsidiary) 
    .joins(:benefit) 
    .where(@sql_query, 
    :benefit_types => filters_benefit_type, 
    :company_subcategorys => filters_category, 
    :zones => filters_zone 
) 

這引發了我以下錯誤:

Mysql2::Error: Operand should contain 1 column(s): 

任何想法?我想我做的.joins和。哪裏錯了...

回答

1

嘗試鏈接關係:

@companies = Company.scoped 
@companies = @companies.where(id_benefit_type: filter_benefit_type) if filter_benefit_type.present? 
@companies = @companies.where(id_subcategory: filter_category) if filter_category.present? 
@companies = @companies.where(zone: filter_zone) if filter_zone.present? 

只要過濾器是空的或整數數組!

where(column: [1,2,3])給出的條件where column in (1,2,3)

加成

的地方部分的細節取決於你的模型之間的關係。
列名沒有反映(至少,不是RoR風格)。
如果公司belongs_to :benefit_type, foreign_key: "id_benefit_type",我的第一個例子會工作(公司的表格將有一列id_benefit_type)。

如果公司has_and_belongs_to_many :benefits,和Benefit有一個屬性id_benefit_type,你就需要一個連接:

@companies = @companies.joins(:benefits).where(:benefits => {id_benefit_type: filter_benefit_type}) if filter_benefit_type.present? 
+0

沒有工作:S 'filters_benefit_type =參數[:filter_benefit_type] filters_category =參數[:filter_category ] filters_zone = params [:filter_zone] companies = Company.scoped companies = companies.where(:id_benefit_type => filters_benefit_type)if filters_benefit_type.present? companies = companies.where(:id_subcategory => filters_category)if filters_category.present? companies = company.where(:zone => filters_zone)if filters_zone.present?' 錯誤: ''where子句'中的未知列'tbl_companys.id_benefit_type' –

+0

請參閱我的除了我的答案 –