【问题标题】:Scope parameter as array in Rails 5Rails 5中的范围参数作为数组
【发布时间】: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


【解决方案1】:

至少,您如何形成 url 查询存在问题,这里:

http://localhost:3000/v1/vacancies?city=SanPedro&Monterrey

正如您在参数中看到的那样:

Parameters: {"city"=>"SanPedro"}

您没有得到一系列城市。尝试更多类似的东西:

http://localhost:3000/v1/vacancies?city%5B%5D=San+Pedro&city%5B%5D=Monterrey

这应该会给你类似的东西:

Parameters: {"city"=>['San Pedro', 'Monterrey']}

顺便说一句,您可以通过以下操作查看正确的查询字符串的外观:

{city: ['San Pedro', 'Monterrey']}.to_query 

在您的控制台中。

然后,您应该能够执行以下操作:

Vacancy.by_city(params[:city])

【讨论】:

  • 谢谢你的回复,对我有帮助,我不知道to_query,以后对我有很大帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-23
  • 1970-01-01
  • 1970-01-01
  • 2017-04-26
  • 1970-01-01
  • 1970-01-01
  • 2019-01-22
相关资源
最近更新 更多