2012-05-11 106 views
0

我有以下查詢查找屬於當前登錄用戶的組織,然後找到屬於該組織的任何事件。Rails 3重構ActiveRecord查詢

def update 
    @organisation = current_user.organisations.find(params[:organisation_id]) 
    @event = @organisation.events.find(params[:id]) 
    if @event.update_attributes(params[:event]) 
     # Handle a successful update. 
     flash[:success] = "Event updated" 
     redirect_to organisation_event_path 
    else 
     render 'edit' 
    end 
end 

這目前導致2個數據庫查詢,這雖然不一定是一個問題,我覺得應該可以在一個查詢來實現。這是可能的還是需要2?如果前者,我應該如何去實現它?

回答

1

它應該工作:

current_user.organisations.joins(:events).where(["id = ? AND events.id = ?", params[:organisation_id], params[:id]]).first() 
+0

你不需要'.all'在... – DGM

+0

這是真的,固定它 – Matzi

1

的查詢可以以這種方式進行重構:

def update 
    @event = Event.joins(:organisations).where("id = ? AND organisation_id = ? AND user_id = ?", params[:id], params[:organisation_id], current_user.id).first() 
    if @event.update_attributes(params[:event]) 
     # Handle a successful update. 
     flash[:success] = "Event updated" 
     redirect_to organisation_event_path 
    else 
     render 'edit' 
    end 
end