2013-05-11 52 views
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'的屬性之一。 使用'@join_events'的'event_id'值, 我想獲得與SQL查詢中的命令相同的效果。如何在Rails中使用SQL IN命令?

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

我該怎麼做才能在rails中實現這種效果?

回答

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

如果我沒有記錯,''上Relation' pluck'工程;不在'Array'上。 'find_all_by_user_id'會給你一個數組,'pluck'將不起作用。 – kiddorails 2013-05-11 06:46:24

+0

是的。你是對的。 – ck3g 2013-05-11 06:49:26

+0

謝謝你的回答:)這對我很有幫助。 – 2013-05-11 06:52:56

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

用這些額外的'[]'你會得到'[[1,2]]'。因此你不需要它們 – ck3g 2013-05-11 06:51:43

+0

謝謝你的回答:)這對我來說是一個很大的幫助。 – 2013-05-11 06:52:37

+0

@ ck3g:是的,我的不好。但是,無論哪種方式。 :) – kiddorails 2013-05-11 06:53:52