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'中的具体值。“event_id”是“JoinEvent”的属性之一。使用'@join_events'的'event_id'值,我想得到和SQL查询中的命令一样的效果。

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

我应该怎么做才能在rails中实现这种效果?

4

2 回答 2

1

至少有两种方法可以分别隐式或显式执行此操作:

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 回答