0
def show_user_events
    user = current_user
    @join_events = JoinEvent.find_all_by_user_id(user.id)
    # @events = Event.where(:id => @join_events)

    respond_to do |format|
       format.html # show_user_events.html.erb
       format.json { render json: @events }
    end
end

「イベント」で特定の値を取得したい。「event_id」は「JoinEvent」の属性の 1 つです。「@join_events」の「event_id」の値を使って、SQLクエリでコマンドと同じ効果を得たい。

SELECT * FROM events
WHERE id in (join_events[1].event_id, join_events[2].event_id, ...)

レールでこの効果を達成するにはどうすればよいですか?

4

2 に答える 2

1

これを暗黙的または明示的に行うには、少なくとも 2 つの方法があります。

JoinEvent.find([1, 2, 3]) # short for JoinEvent.where(id: [1, 2, 3])
JoinEvent.where(event_id: [1, 2, 3])

JoinEvent.where("event_id IN (?)", [1, 2, 3])

可能であれば最初のアプローチを好む

したがって、あなたの場合、次の方法で収集できますids

@join_events = JoinEvent.where(user_id: current_user.id)
@join_events_ids = @join_events.pluck(:id)

または(より好ましい方法)

current_user.join_event_ids

has_many関連付けが付属しています

collection_singular_ids

関連付けられたオブジェクトの ID の配列を返します

于 2013-05-11T06:36:20.613 に答える
0
JoinEvent.where(:event_id => [@join_events.map(&:id)])
于 2013-05-11T06:38:35.543 に答える