ruby-on-rails - 在Rails中使用ruby中的哈希表查询/过滤器

标签 ruby-on-rails ruby search hash sqlite

我在Rails 4和SQLite3上使用ruby。我想使用列=>值组合的哈希查询表/模型。给定哈希值:

 a = {"Size" => 1, "Type" => "Tall", "Material" => "Metal", "Option 1" => "Yes", "Option 2" => "No"}


和表PARTS:

PART     SIZE     TYPE     MATERIAL    OPTION 1     OPTION 2
A1234    1        Tall     
A1233    2        Tall
A1232    3        Tall
A1231    4        Tall
A8787                      Plastic
A8786-01                   Metal       Yes
A8786-02                   Metal       No
A8785                      Liquid
A6543                                                Yes


我希望查询查看每一列,并返回所有包含哈希中给定值的Parts以及任何包含nil或空白的实例。因此,值"Option 1" => "Yes"应保留A8786-01以及该列中所有其他空白部分。换句话说,将取消A8786-02。

上面显示的哈希将返回部件["A1234", "A8786-01"]。可以用一种方法完成吗?还是一连串的作用域?我愿意采取任何好的方法。我以为这可能包括使用a.each遍历Hash,但是我不确定它如何工作。

最佳答案

基本的where方法:

attrs = {"Size" => 1, "Type" => "Tall", "Material" => "Metal", "Option 1" => "Yes", "Option 2" => "No"}
Part.where(attrs)


返回Part记录,该记录与每个属性的每个给定值完全匹配。



另一种方法是:

attrs = {"Size" => 1, "Type" => "Tall", "Material" => "Metal", "Option 1" => "Yes", "Option 2" => "No"}
sql_query = attrs.map { |col, val| "(parts.#{sanitize(col)} = #{sanitize(val)} OR pars.#{sanitize(col)} IS NULL)" }.join(" AND ")
Part.where(sql_query)


返回与每个给定值匹配的Part记录,或者给定列具有NULL值(但不包含空字符串"")。

我已经在这里看到一个缺陷:它将为每个“所需值”返回具有Part值的NULL记录。例:

# consider this dummy data
# PART     SIZE     TYPE     MATERIAL    OPTION 1     OPTION 2
# A1234    1        Tall     
# A1233

attrs = { "Size" => 1, "Type" => "Tall" }
sql_query = attrs.map { |col, val| "(parts.#{sanitize(col)} = #{sanitize(val)} OR pars.#{sanitize(col)} IS NULL)" }.join(" AND ")
Part.where(sql_query)
# will returns A1234 AND A1233 records

关于ruby-on-rails - 在Rails中使用ruby中的哈希表查询/过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29284287/

相关文章:

ruby-on-rails - 如何传递参数[:search] with autocomplete_field_tag?

ruby-on-rails - 如果数据库为空,则处理 ActiveRecord 错误

ruby-on-rails - 使用 rails 4、nginx 和 passenger 为用户设置自定义域

ruby-on-rails - Basic rails - link_to 如何工作并将其替换为渲染

mysql - 如何在 mysql 查询中使用字符串数组

python - 如何使用正则表达式在句子内搜索 - 不区分大小写

ruby-on-rails - 为什么 SimpleForm 不适用于日期字段?

ruby - 下载位置 Selenium-webdriver Cucumber Chrome

angular - 搜索/过滤状态 NGXS

android - 如何在带有 Firebase 内容的 Android 中使用 Algolia