rails嵌套的路由id不属于父关联id

uqdfh47h  于 2021-09-29  发布在  Java
关注(0)|答案(1)|浏览(310)

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

  1. resources :events, only: :index
  2. resources :organisations do
  3. resources :events, except: [:index]
  4. end

允许我有以下路线:-

  1. /events
  2. /organisations/1/events/1

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

  1. /organisations/1/events/2

i、 e.这将向我展示活动2,但该活动的组织机构现在是组织机构1。
在我的eventscontroller中,我只有通常生成的普通路径:-

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

我的问题:-rails应该知道如何处理这个问题,并且我是否在这里设置了错误的内容,还是只需要在我的 show 方法,当前事件是否属于当前组织(如果不是,则重定向到某个位置)?

blpfk2vs

blpfk2vs1#

您需要手动处理它。
在SETU事件中 Event.find(params[:id]) 直接查找记录而不进行任何组织操作检查。
处理它的一种方法是使用作用域。如果您传递的事件id不属于组织,您将收到recordnotfound。

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

此外,您还需要更改回调的顺序:应在set_事件之前调用set_组织。

相关问题