【问题标题】:Finding a value in a serialized model array在序列化模型数组中查找值
【发布时间】:2016-11-26 06:39:12
【问题描述】:

我不确定是否已经对此进行了解释,也许我问错了问题,但我希望有人可以帮助我解决这个问题。

我正在寻找模型数组中的值。我的模型如下所示:

class Product < ActiveRecord::Base
    #  product_category    :text
    serialize :product_category, Array
end

一个条目的例子:

#<Product:0x0055cd0c1382b8> {
       :id => 42266,
       :product_category => [
           [0] 8, [1] 3
       ]
}

我需要找到属于product_category3 或3 和其他类别组合的所有产品。

我尝试了类似的东西

ap Product.where(product_category: [8])

但这不会返回任何东西。

如果这个问题已经被问过,请转发给我正确的答案。如果没有,非常感谢您花时间帮助我。

跑步:

  • Rails 4.2.4
  • Ruby 2.3.1.p112
  • SQLite3

【问题讨论】:

  • 您似乎应该重组您的数据库并使用带有产品类别的has_and_belongs_to_manyhas_many :through,而不是序列化产品类别列。这将使搜索更容易
  • 不可能通过序列化字段查找。你应该按照@j-dexx 的建议重构你的数据库。
  • 您使用的是什么数据库?什么类型的列。如果您在 Postgres 中使用 JSON 样式的列,那么您可以查询数组内容。

标签: ruby-on-rails arrays ruby serialization models


【解决方案1】:

最好的方法是通过 where 子句

Product.where("product_category = ?", [3].to_yaml)

.to_yaml 可以解决问题。

【讨论】:

    【解决方案2】:

    虽然我不建议这样做,但补丁工作如下

    Product.all.select { |m| m.product_category.include? '3' }
    

    不要对以后需要查询的任何数据使用#serialize

    【讨论】:

    • 这似乎可行,但正如您和其他人所建议的那样,我将改为重组我的数据库。谢谢你的回答。
    • 如果您没有太多查询,则无需对其进行重组。您可以使用 where 子句来解决性能问题。
    猜你喜欢
    • 2017-10-16
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 2014-03-19
    • 2016-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多