轨道嵌套路由 ID 不属于父关联 ID



我设置了一些嵌套路由,如下所示:-

resources :events, only: :index
resources :organisations do
resources :events, except: [:index]
end

允许我有以下路线:-

/events
/organisations/1/events/1

以上两种方法都很好,但是,我可以更改URL中的事件id,它会给我一个不属于该组织的事件,但组织id将保持不变:-

/organisations/1/events/2

也就是说,这将向我展示第二次活动,但这次活动的组织现在是第一次组织。

在我的EventsController中,我只有通常生成的普通路由:-

class EventsController < ApplicationController
before_action :set_event, only: %i[show edit update destroy]
before_action :set_organisation, except: %i[index]
# GET /events/1
def show; end
# Use callbacks to share common setup or constraints between actions.
def set_event
@event = Event.find(params[:id])
end
def set_organisation
@organisation = Organisation.find(params[:organisation_id])
end

我的问题是:-Rails应该知道如何处理这个问题,我在这里设置错误了吗?还是我只需要通过在show方法中检查当前事件属于当前组织来手动处理它(如果不是,则重定向到某个地方(?

您需要手动处理它。

在set_event中,Event.find(params[:id])在没有任何操作检查的情况下直接查找记录。

处理它的一种方法是使用作用域。如果您传递了一个不属于组织的事件id,您将收到RecordNotFound。

def set_event
@event = @organisation.events.find(params[:id])
end

您还需要更改回调的顺序:set_organization应该在set_event之前调用。

最新更新