【问题标题】:Rails: PG::SyntaxError: ERROR: syntax error at or near ":"Rails:PG :: SyntaxError:错误:“:”处或附近的语法错误
【发布时间】:2017-04-01 08:10:48
【问题描述】:

我正在尝试编写这个查询:

@myquery = Event.where("reservations.map(&:first)= ?", current_user.id)

但我收到此错误:

ActionView::Template::Error (PG::SyntaxError: ERROR:  syntax error at or near ":"
LINE 1: ...ECT "trips".* FROM "events" WHERE (reservations.map(&:first)= 1...
                                                                ^

此查询的目标是在数组数组的第一个元素中查找用户 ID,例如:[["2","1"],["4","1"]] 其中 2, 4是用户 ID。 我尝试了不同的解决方案,但仍然有这个问题!

【问题讨论】:

  • 您想从events 表中获取任何特定记录吗?
  • @dnsh 是的! current_user.id 被找到作为reservations 数组的子数组的第一个元素的记录。例如,如果 Wanted 为 1,则保留中包含 ["1", "..."] 的记录,如 reservations = [["2","3"], ["1","4"]]
  • @AndreyDeineko 我不这么认为!事件是一个表,我正在使用类似的查询,但不是数组数组!
  • 这个还不清楚。您是否只想根据 current_user.id 过滤您的数组数组?你不需要数据库查询。

标签: ruby-on-rails arrays postgresql ruby-on-rails-4 activerecord


【解决方案1】:

有点困惑,但我猜您正试图在 UsersEvents 之间创建多对多关系(即 User 有很多 EventsEvent 有很多Users)。

如果是这样,您不想通过将所有 user_id 存储在 Event 模型中来执行此操作,反之亦然。你想要的是创建一个包含每个 id 的连接表

#database table
create_table "user_events", force: :cascade do |t|
  t.integer  "user_id"
  t.integer  "event_id"
  t.datetime "created_at"
  t.datetime "updated_at"
end

#join table
class UserEvents < ActiveRecord::Base
  belongs_to :user
  belongs_to :event
end

#user
class User < ActiveRecored::Base
  has_many :user_events, dependent: :destroy
  has_many :events, through: :user_events
end

#event
class Event < ActiveRecord::Base
  has_many :user_events, dependent: :destroy
  has_many :users, through: :user_events
end

通过这种结构,您可以告诉您的应用程序 UsersEvents 通过 UserEvents 相关联,并且可以访问各种有用的关键字。

例如你可以这样做

Event.includes(:users).all.map {|event| event.user.first.id}

这将从每个事件中返回第一个用户的所有 id,这就是我认为你想要完成的。

【讨论】:

  • 这不是多对多的关系。问题是我不知道如何使用数组数组并搜索它的第一个元素。要了解更多信息,请查看我的另一个尚未解决的问题! stackoverflow.com/questions/40614678/…
  • @AboozarRajabi 如果数组数组存储在数据库中,则必须将其加载到内存中才能在其上运行 Ruby 代码。 map 之类的函数不是有效的 SQL。我能问一下你为什么要在事件模型中存储一个数组数组吗?
  • @AboozarRajabi 我认为您正在尝试创建多对多关系,但不是传统模式。我说 Event -> Reservations 是一对多和 Reservations -> Users 是多对多的说法对吗? (即一个事件有很多预订,一个预订有一个事件,一个用户有很多预订,一个预订有很多用户)
猜你喜欢
  • 1970-01-01
  • 2019-01-20
  • 2017-02-20
  • 2017-07-15
  • 2010-12-24
  • 2016-07-10
  • 2018-11-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多