0

現在サインインしているユーザーに属する組織を検索し、その組織に属するイベントを見つける次のクエリがあります。

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 つのクエリになりますが、これは必ずしも問題ではありませんが、1 つのクエリで達成できるはずです。それは可能ですか、それとも 2 である必要がありますか? 前者の場合、それを達成するにはどうすればよいですか?

4

2 に答える 2

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
于 2012-05-11T12:02:27.510 に答える
1

それはうまくいくはずです:

current_user.organisations.joins(:events).where(["id = ? AND events.id = ?", params[:organisation_id], params[:id]]).first()
于 2012-05-11T11:47:19.417 に答える