【问题标题】:Rails Query if Array contains other ArrayRails 查询数组是否包含其他数组
【发布时间】:2013-03-03 21:27:37
【问题描述】:

我有一个过滤器类,用于过滤转租列表。在我的过滤器类中,我有一个列表方法,它返回符合用户在表单中输入的条件的所有列表。这是过滤器类。

class Filter < ActiveRecord::Base

  attr_accessible :air_conditioning, :available_rooms, :bathrooms, :furnished, :negotiable, :new, :parking, :maximum_price, :private_bathroom, :show, :term, :total_rooms, :utilities, :washer_dryer
  serialize :term

  def listings
    @listings ||=find_listings
  end

private

    def find_listings
    listings=Listing.order(:price)
    listings=listings.where("listings.price <= ?", maximum_price) if maximum_price.present?
    listings=listings.where(total_rooms: total_rooms) if total_rooms.present?
    listings=listings.where(available_rooms: available_rooms) if available_rooms.present?
    listings=listings.where(bathrooms: bathrooms) if bathrooms.present?
    listings=listings.where(term: term)
    listings=listings.where(furnished: furnished)
    listings=listings.where(negotiable: negotiable)
    listings=listings.where(utilities: utilities)
    listings=listings.where(air_conditioning: air_conditioning)
    listings=listings.where(parking: parking)
    listings=listings.where(washer_dryer: washer_dryer)
    listings=listings.where(private_bathroom: private_bathroom)
    listings
  end

 end

线路有问题

listings=listings.where(term: term)

Term 保存为可以序列化的字符串。 Aka ['Summer', 'Fall] 用户选中复选框以选择可用于转租的术语。但是,where 子句每次都失败。如何检查用户选择的元素是否包含在列表的条款中?

【问题讨论】:

    标签: ruby-on-rails model where


    【解决方案1】:

    我不确定你打算用 term 做什么,但你能把它变成一个字符串类型,然后使用类似的东西吗?

    TERMS = %w(Spring Summer Fall Winter)
    validates :term, :inclusion => { :in => TERMS }
    

    编辑:另外,您是否打算让 Filter 实际上成为数据库中的一个表,或者只是一个带有验证的模型?如果是后者,您可能需要考虑使用 ActiveModel:http://yehudakatz.com/2010/01/10/activemodel-make-any-ruby-object-feel-like-activerecord/

    【讨论】:

    • 你是对的,这不是查询。当您尝试运行您发布的代码时,您会遇到什么错误?列表模式是什么样的?由于它是 Ruby 对象的序列化字段,因此您可能无法在这样的 SQL 查询中使用它。但是您可以在从数据库中获取结果后对其进行过滤,如下所示: Listings.find_all { |l| l.包括?术语}
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-16
    • 1970-01-01
    • 1970-01-01
    • 2018-11-16
    • 2021-12-08
    • 2019-04-08
    相关资源
    最近更新 更多