2012-05-11 20 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 

これは、現在問題は必ずしもながら、私は1つのクエリで実現することができるようにすべきであると感じており、データベースに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 
関連する問題