Sql 使用Rails中的输入编号拾取具有范围的对象
我的对象上有一个最小/最大年龄范围:Sql 使用Rails中的输入编号拾取具有范围的对象,sql,ruby-on-rails,ruby,postgresql,ruby-on-rails-5,Sql,Ruby On Rails,Ruby,Postgresql,Ruby On Rails 5,我的对象上有一个最小/最大年龄范围: name: "Event 1" type: Package # inheritance min_age: 1 max_age: 8 category_id: 2 # Birthday 我想根据用户对年龄和类型的偏好,通过查看对象的年龄范围是否满足输入的数字来选择并返回这些对象 目前,我被困在: 控制器代码: age = params[:age] item_type = params[:item_type] @all_items = Item.where("
name: "Event 1"
type: Package # inheritance
min_age: 1
max_age: 8
category_id: 2 # Birthday
我想根据用户对年龄和类型的偏好,通过查看对象的年龄范围是否满足输入的数字来选择并返回这些对象
目前,我被困在:
控制器代码:
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.where("categories.name = ?", 'birthday')
很可能会失败,因为类别
没有与
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')
考虑< <代码> > <代码> >何处(‘在最小年龄与最大年龄之间,年龄)< /代码>真棒,谢谢。另外一个是#{item_type}必须是“#{item_type}”-并用引号括起来。@whizofoz正确,已编辑。很高兴它对你有用
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')
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')