Rails:PG :: SyntaxError:ERROR:语法错误在或附近":"

时间:2016-11-17 16:56:42

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

我试图写这个查询:

@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"],[&#34 ; 4"," 1"]]其中2,4是用户ID。 我尝试了不同的解决方案,但仍有这个问题!

1 个答案:

答案 0 :(得分:0)

有点困惑,但我猜你在尝试在0Users之间创建多对多关系(即Events有很多User Events有很多Event)。

如果是这样,您不希望通过将所有user_id存储在Users模型中来实现,反之亦然。你想要的是创建一个连接表,其中包含每个

的ID
Event

使用此结构,您告诉您的应用#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 Users通过Events相关,并且可以访问各种有用的关键字。

例如你可以做

UserEvents

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