2014-03-26 53 views
0

我正在爲具有與傳遞到suggestions(character)方法中的字符參數匹配的屬性的用戶進行活動記錄查詢。我希望類似的屬性得到匹配,如果一個字符的屬性留空,那麼它會與任何用戶匹配。查詢ruby-on-rails中的非空模型屬性

如何查詢字符。*(character.age,character.height等)不爲空的屬性?

例如,如果我的其中一個角色只有名稱和年齡,而其他屬性留空,因此爲null,那麼在調用User.where()時如何不查詢它們?我可以使用哪些其他方法?注意:還有更多的屬性,因此將每個案例分爲不同的方法是沒有意義的。

def suggestions(character) 
    suggestions = User.where(
     age: character.age, 
     height: character.height, 
     weight: character.weight, 
     gender: character.gender, 
     ethnicity: character.ethnicity 
    ) 
    end 
+0

多少總? –

+0

七,現在。 – stecd

回答

1

您可以非常簡單地過濾字符對象以忽略nil值然後觸發查詢。

def suggestions character 
    filter_character = {} 
    character.serializable_hash.map {|key, value| filter_character[key] = value unless value.nil?} 
    suggestions = User.where **filter_character 
end 

這將完成的序列化的原始對象,篩選出零值,然後傳回給查詢作爲圖示。

這是一個完全可擴展的方法,應該可以處理對象的任何數量的屬性。

1

您需要刪除空PARAMS你的對象,然後進行搜索:

def suggestions(character) 
    character_params = character.attributes.dup 
    search = character_params.delete_if{|k,v| v.nil?} 
    suggestions = User.where(search)  
end