Rails 路由 - 嵌套资源的上下文 url

Rails routes - context for nested resource url

我正在尝试为嵌套资源的显示操作创建嵌套路径

user.rb

has_many :fan_receives, as: :fanzone_owner, class_name: "FanActivity"

fan_activity.rb

belongs_to :fanzone_owner, polymorphic: true

在我的routes.rb

match ":fanzone_owner_id/posts/:id", to: "fan_activities#show", via: :get

路径有效,但 fanzone_owner_id 可以是任何东西。例如,

示例。com/1/fan_activities/2 有效
例如。com/2/fan_activities/2 也有效
例如。com/anythingatall/fan_activities/2 也有效

我想做到 url 的 fanzone_owner_id 必须匹配 fan_activity 的外键,否则我们重定向到 404。

我会在控制器中对 url 进行验证检查吗?我不确定这种做法是否正确

根据我建议使用的信息 nested routes

resources :fanzone_owner do
 resources :fan_receive
end

为此,你也应该 nested attributes ready, otherwise the above routing would make no sense at all. This tutorial 可能会有所帮助。

我知道出了什么问题。我只需要使用控制器中 url 的参数来执行显示操作。

在fan_activities_controller.rb

@user = User.find(params[:fanzone_owner_id])
@fan_activity = @user.fan_receives.find(params[:id])

如果找不到用户或用户不是 fanzone_owner,那么它将是 404。