【问题标题】:Rails: How to use scope to find an element in array of arraysRails:如何使用范围在数组数组中查找元素
【发布时间】:2023-03-08 12:11:01
【问题描述】:

我有一个数组,如[["2","3"], ["3","1"], ["6", "1"]]。每个子数组的第一个元素是用户 ID,第二个元素是用户为活动预留的座位数。 我想让每个用户通过在数组中找到他的 ID 来查看他的预订。假设我有两个模型:用户和事件。在用户控制器中,我想使用像@mybooking = Event.mybooking(current_user.id) 这样的范围,问题是如何在事件模型中编写正确的范围? 而且,如果找到用户,我也想使用它的第二个元素。

我尝试了不同的解决方案,但没有奏效!如果您认为无法使用范围以及您是否有其他解决方案,请告诉我。

编辑: 由于我仍在等待可行的解决方案,我应该提到我正在寻找这样的东西:

scope :mybookings, ->(id){where("reservations.to_enum.map{|n,m| n} ?", id)}

scope :mybookings, ->(id) { where("reservations.map(&:first) ?", id) }

这两个不起作用,因为我得到与“....”部分相关的错误。 而且,下面的解决方案不正确,因为我从用户控制器调用事件的范围,并且不可能在该控制器中使用 reservations,因为此变量用于事件控制器。

【问题讨论】:

  • scope :mybooking, ->(current_user_id) { where user_id: current_user_id }
  • @mudasobwa 这不是真的!再次检查问题!

标签: ruby-on-rails ruby postgresql ruby-on-rails-4 scope


【解决方案1】:
class Event
  scope :mybooking, ->(user_ids) { where(user_id: user_ids) }
end

现在可以在控制器中做:

reservations = [["2","3"], ["3","1"], ["6", "1"]]
Event.mybooking(reservations.map(&:first))

【讨论】:

  • 我不认为它有效!数组是这样的:reservations = [["2","3"], ["3","1"], ["6", "1"]],怎么才能找到用户id数组的第一个子元素? (2、3 和 6 是用户 ID)
  • @AboozarRajabi 查看编辑。只需按第一个元素 (id) 映射数组并将结果数组传递到作用域。让我知道它是否适合你
  • 谢谢,但我不明白您如何将 user_id 传递给范围?!另一个问题是我认为你会得到错误,因为你正在使用另一个控制器中的保留!我认为您无权访问它。
  • @AboozarRajabi 1. 你传递 user_ids 数组,因为reservations.map(&:first) 的结果是["2", "3", "6"]。 2.我没有在任何控制器中使用reservations,是你使用它,你的任务是将reservations数组正确传递到你将提取用户ID并传递给范围的地方:)
  • 使用 reservations.map(...) 会导致此错误: NameError (undefined local variable or method `passengers' for #
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-26
  • 1970-01-01
  • 2010-12-09
  • 1970-01-01
  • 2017-12-05
  • 2011-07-21
相关资源
最近更新 更多