0

我想写这个查询:的Rails:PG ::语法错误:错误:语法错误或接近 “:”

@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是用户标识。 我尝试了不同的解决方案,但仍然有这个问题!

+0

你想从'events'表中获取任何特定记录吗? – dnsh

+0

@dnsh是的!找到current_user.id的记录是保留数组子数组的第一个元素。例如,如果想要是1,那么在保留中具有[“1”,“...”]的记录,如保留= [[“2”,“3”],[“1”,“4”]] –

+0

@AndreyDeineko我不这么认为!事件是一个表,我正在使用类似的查询,但不是阵列的数组! –

回答

0

有点困惑,但我猜你想创建UsersEvents之间的许多一对多的关系(即一个User有许多EventsEvent有许多Users)。

如果是这样,您不希望通过将所有user_id存储在Event模型中,反之亦然。你想要什么的就是创建包含IDS每个

#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从每一个事件,这是我认为你要完成的任务。

+0

这不是一个多对多的关系。问题是我不知道如何使用数组数组并搜索它的第一个元素。要了解更多信息,请参阅我的另一个未解决的问题! http://stackoverflow.com/questions/40614678/rails-how-to-use-scope-to-find-an-element-in-array-of-arrays –

+0

@AboozarRajabi如果阵列数组存储在数据库中你将不得不将它加载到内存中,以便能够在其上运行Ruby代码。像'map'这样的函数不是有效的SQL。我可以问你为什么要在事件模型中存储数组数组吗? – SomeSchmo

+0

@AboozarRajabi我认为你正试图建立一个多对多的关系,但不是传统的模式。我说的事件是否正确 - >预订是一对多和预订 - >用户是多对多的? (即一个事件有很多预约,一个预约有一个事件,一个用户有很多预约,而一个预约有很多用户) – SomeSchmo

相关问题