2015-03-03 64 views
-1

我有以下查詢:如何在Rails Active Record中實現AND子句?

select source_names.id as source_id, source_names.name as source_name, source_types.id as source_type_id,source_types.name type_name,event_sources.id 
    from source_names 
    left join source_types 
    on source_type_id = source_types.id 
    left join event_sources 
    on source_names.id = event_sources.source_id and event_id = 1 


result = SourceName.joins(' 
           LEFT JOIN source_types ON source_type_id = source_types.id 
           LEFT JOIN event_sources ON source_names.id = event_sources.source_id 
           ').where('event_id =?',event_id).select('source_names.id as source_id, source_names.name as source_name, source_types.id as source_type_id,source_types.name type_name,event_sources.id').all 

產量:

select source_names.id as source_id, source_names.name as source_name, source_types.id as source_type_id,source_types.name type_name,event_sources.id 
     from source_names 
     left join source_types 
     on source_type_id = source_types.id 
     left join event_sources 
     on source_names.id = event_sources.source_id WHERE event_id = 1 

但我想and event_id = 1

你怎麼我做到了嗎?

+0

@vee你能否解釋一下你在說什麼? – Volatil3 2015-03-03 03:01:09

+0

示例:'SourceName.joins('LEFT JOIN event_sources ON source_names.id = event_sources.source_id AND event_sources.event_id = 1')...'。 – vee 2015-03-03 03:05:09

+0

@vee它確實有效,但有幾個問題,1)如何傳遞event_id的參數化值? 2)它是否是'rails方式'來解決這個問題? – Volatil3 2015-03-03 03:08:14

回答

1

如果你不想要一個WHERE,不要使用.where

只需將它添加到您的連接:

SourceName.joins(' 
    LEFT JOIN source_types ON source_type_id = source_types.id 
    LEFT JOIN event_sources ON source_names.id = event_sources.source_id and event_sources.event_id = 1') 
相關問題