【发布时间】:2019-01-16 07:05:44
【问题描述】:
我有这个带有参数 city 的范围,范围接收参数,加入一个表调用 Restaurant(因为我在那里有参数),然后它使用 IN 为多个 OR 创建一个 where 条件。
scope :by_cities, -> (city) { joins(:restaurant).where('restaurants.city IN (?)', city) }
问题是我想了解作用域如何接收作用域中的参数数组,我已经尝试了很多东西,我正在接受这个人的指导:Rails 4 scope with argument 和这个:@ 987654322@
日志
Parameters: {"city"=>"SanPedro"}
SELECT "vacancies".* FROM "vacancies" INNER JOIN "restaurants" ON
"restaurants"."id" = "vacancies"."restaurant_id" WHERE (restaurants.city
IN ('SanPedro'))
路线
http://localhost:3000/v1/vacancies?city=SanPedro&Monterrey
但是,不太明白怎么做,有人知道吗?
【问题讨论】:
-
“不太明白怎么做”——但你已经做到了。像这样使用它:
MyModel.by_cities([city1, city2]) -
那样不行,我已经试过了,当我写
MyModel.by_cities('New York', 'San Fransisco')时我得到这个错误:ArgumentError: wrong number of arguments (given 2, expected 1) -
你试过
scope :by_cities, -> (*cities) { joins(:restaurant).where('restaurants.city IN (?)', cities) }吗?顺便说一句,docs 状态 “使用类方法是接受范围参数的首选方式。” -
我也已经尝试过了,幸运的是,我没有收到错误,但是当我在数据库中获取咨询时,我没有得到所有信息,只有一个城市,返回日志是这样的:
SELECT "vacancies".* FROM "vacancies" INNER JOIN "restaurants" ON "restaurants"."id" = "vacancies"."restaurant_id" WHERE (restaurants.city IN ('Monterrey'))我想要相同但有多个值,如下所示:SELECT "vacancies".* FROM "vacancies" INNER JOIN "restaurants" ON "restaurants"."id" = "vacancies"."restaurant_id" WHERE (restaurants.city IN ('Monterrey, SanPedro')) -
“当我写
MyModel.by_cities('New York', 'San Fransisco')” - 但这不是我写的。我的例子有一个数组,你的没有。
标签: ruby-on-rails arrays ruby scope ruby-on-rails-5