我如何在Rails中使用SQL IN命令?

时间:2013-05-11 06:31:38

标签: ruby-on-rails ruby

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'的属性之一。 使用'@join_events'的'event_id'值, 我想获得与SQL查询中的命令相同的效果。

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

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

2 个答案:

答案 0 :(得分: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的数组

答案 1 :(得分:0)

JoinEvent.where(:event_id => [@join_events.map(&:id)])