gpt4 book ai didi

sql - 使用 Rails 中的输入数字选择具有范围的对象

转载 作者:太空宇宙 更新时间:2023-11-03 18:06:43 26 4
gpt4 key购买 nike

我的对象上有最小/最大年龄范围:

name: "Event 1"
type: Package # inheritance
min_age: 1
max_age: 8
category_id: 2 # Birthday

我想根据用户对年龄和类型的偏好来选择并返回这些对象,方法是查看对象的年龄范围是否满足输入的数字。

目前我坚持:

Controller 代码:

age = params[:age]
item_type = params[:item_type]
@all_items = Item.where("categories.name = ?", 'birthday')
@events = @all_items.where("(type: #{item_type}) AND ...here I need to lookup if the #{age} variable is within the object range")

现在的问题是我需要通过输入的用户编号选择一个生日事件,对象本身具有范围。有没有一种方法可以做到这一点而无需遍历每个对象?

最佳答案

@events = @all_items.where("type = #{item_type} AND min_age >= #{age} AND max_age <= #{age}")

我想这些关联如下所示:

Item has_many :categories
Category belongs_to :item

在这种情况下

Item.where("categories.name = ?", 'birthday')

很可能会失败,因为 categories 没有与类似的东西连接

ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR:  missing FROM-clause entry for table "categories"

这是你想要做的:

Item.joins(:categories)
.where(categories: { name: 'birthday' })
.where("items.type = '#{item_type}' AND items.min_age >= #{age} AND items.max_age <= #{age}")
.group('items.id')

使用 PostgreSQL's BETWEEN可能会使查询看起来更好更短:

Item.joins(:categories)
.where(categories: { name: 'birthday' })
.where("items.type = '#{item_type}' AND #{age} BETWEEN items.min_age AND items.max_age")
.group('items.id')

关于sql - 使用 Rails 中的输入数字选择具有范围的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43682383/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com