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 次查询,虽然这不一定是问题,但我觉得应该能够在一次查询中实现。这是可能的还是需要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 回答