【问题标题】:Rails query where array attribute contains overlap with other arrayRails 查询数组属性包含与其他数组重叠的位置
【发布时间】:2013-03-10 05:28:25
【问题描述】:

我有一个名为 Listing 的模型,它代表一个公寓转租的列表。这些转租可以以不同的期限出租(夏季、冬季等)。因此,每个 sublet 的术语都存储为序列化字符串。 (我知道这不是最好的方法,但我正在尝试启动这个应用程序)我正在为这些列表创建一个过滤器功能,因此用户可以选择他们想要的列表中的哪些属性并显示与过滤器匹配的结果.但是,我在使用术语部分时遇到了麻烦。用户可以检查他们希望列表可用的术语,因此这也存储在序列化数组中。使用 rails orm 我该怎么做

listing=listing.where("term contains value(s) from input term")

基本上,我希望它返回用户首选条款与列表条款至少有一个重叠的列表。

即如果列表具有夏季会话 1 和冬季的条款,并且用户选择夏季会话 1 和春季,则应返回该列表。

有人有什么想法吗??

【问题讨论】:

    标签: ruby-on-rails orm where


    【解决方案1】:

    这就是你要找的东西:

    listings = Listing.where('term in (?)', terms)
    

    或者你可以这样做:

    listings = Listing.where(:term => terms)
    

    【讨论】:

    • 返回 ActiveRecord::StatementInvalid in Filters#show SQLite3::SQLException: no such table: Summer 1: SELECT COUNT(*) FROM "listings" WHERE "listings"."furnished" = 't ' AND "listings"."negotiable" = 't' AND "listings"."utilities" = 't' AND "listings"."air_conditioning" = 't' AND "listings"."parking" = 'f' AND "listings"."washer_dryer" = 't' AND "listings"."private_bathroom" = 'f' AND (listings.price
    • 问题出在最后,并在我检查夏季 1 时进行了测试
    • 我已经更新了答案(有一个语法错误)。再试一次。
    • 好的,这不会产生错误,但不会返回任何结果。不是吗?将成为用户输入的条款,那么这些条款不应该出现在列表的条款中吗?
    • 我在这里有点摸不着头脑,因为我不知道您的列表表架构是什么样的,也不知道您的用户输入究竟是什么。我的示例假设您有一个名为 listings 的表和一个名为 term 的列,并且用户输入 terms 将类似于 ['winter', 'summer']。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多