0

나는이 쿼리 작성하려고 해요 :레일 : 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... 
                   ^

을 오류 : 구문 오류 또는 근처 "" 이 쿼리의 목표는 [[ ""2 ","1 "], ["4 ","1 "]] 2, 4는 사용자 ID와 같은 배열 배열의 첫 번째 요소에서 사용자 ID를 찾는 것입니다. 다른 해결책을 시도했지만 여전히이 문제가 있습니다!

+0

'events' 테이블에서 특정 레코드를 가져 오시겠습니까? – dnsh

+0

@dnsh 예! current_user.id가 예약 배열의 하위 배열의 첫 번째 요소로 발견 된 레코드입니다. 예를 들어, wanted가 1이면 reservations = [[ "2", "3"], [ "1", "4"]와 같은 예약에서 [ "1", "..."]을 갖는 레코드 –

+0

@ AndreyDeineko 나는 그렇게 생각하지 않는다! 이벤트는 테이블이며 비슷한 배열을 사용하고 있지만 배열 배열은 아닙니다! –

답변

0

약간 혼란스러워하지만 난 당신이 UsersEvents 사이의 다 대다 관계를 만들기 위해 노력하고 추측하고있어 (즉, User이 많은 EventsEventUsers 많은있다).

그렇다면 Event 모델에 모든 user_ids를 저장하고 싶지 않고 그 반대의 경우도 마찬가지입니다. 당신이 원하는 것은 당신이 UsersEventsUserEvents을 통해 관련 유용한 키워드의 모든 종류에 액세스 할 수 있음을 응용 프로그램을 말하고있다이 구조와 각

#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 

의 ID를 보유하고 조인 테이블을 만드는 것입니다 할 수 있습니다.

예를 들어, 당신은 당신이 달성하기 위해 노력하고 생각하는 것입니다 모든 이벤트에서 첫 번째 사용자의 모든 ID를 반환합니다

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

을 할 수 있습니다.

+0

많은 관계가 아닙니다. 문제는 배열 배열을 사용하여 작업하고 첫 번째 요소를 검색하는 방법을 모르겠다는 것입니다. 더 많은 것을 알고 싶다면, 아직 해결되지 않은 채 다른 질문을보십시오! http://stackoverflow.com/questions/40614678/rails-how-to-use-scope-to-find-an-element-in-array-of-arrays –

+0

@AboozarRajabi 배열 배열이 데이터베이스에 저장되는 경우 루비 코드를 실행할 수 있으려면 메모리에로드해야합니다. 'map'과 같은 함수는 유효한 SQL이 아닙니다. 이벤트 모델에 배열의 배열을 저장하는 이유는 무엇입니까? – SomeSchmo

+0

@AboozarRajabi 저는 여러분이 다 대다 관계를 만들려고 노력하고 있지만 전통적인 패턴이 아니라고 생각합니다. 나는 이벤트 -> 예약은 일대 다, 예약 -> 사용자는 many-to-many라고 말하는 것이 맞을까요? (즉, 이벤트에는 많은 예약이 있고, 예약에는 하나의 이벤트가 있고, 사용자에게는 많은 예약이 있고, 예약에는 많은 사용자가 있습니다) – SomeSchmo