[英]Rails, how do I chain scopes with an “and” operator between them?
我有一個看起來像這樣的范圍:
scope :attr_similar_to, -> (attr, strings) { where("#{attr} similar to ?", "%(#{strings})%") }
我使用此范圍的方式是遍歷多個屬性,對於每個屬性,我將屬性連同“ strings”變量中的一組多個字符串一起發送到范圍中,並將其作為“ foo | bar”發送到該范圍中|等”。 因此,對於每個屬性,我都會檢查屬性值是否與任何字符串相似。
我使用此作用域的循環如下所示:
results = Model.none
attributes.each do |attr|
results += attr_similar_to(attr, strings)
end
問題是,如果我有兩個屬性“名稱”和“年齡”,並且只有“名稱”與“ foo”匹配,它仍將為我提取所有與“ foo”匹配的記錄。 我希望能夠將這些范圍調用與諸如“ and”運算符之類的鏈接在一起,以便例如“ name”和“ age”都必須匹配,才能獲取任何記錄。
我是否可能嘗試以錯誤或低效的方式執行此操作?
results = Model.all # Model.scoped in rails 3
attributes.each do |attr|
results = results.attr_similar_to(attr, strings)
end
或更簡潔:
results = attributes.inject(Model.all) do |result, attr|
result.attr_similar_to(attr, strings)
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.