簡體   English   中英

Rails,如何在示波器之間使用“和”運算符鏈接示波器?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM