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

时间:2017-01-31 21:18:23

标签: ruby-on-rails routes nested-routes

我正在尝试为嵌套资源的show动作创建嵌套路径

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可以是任何东西。例如,

example.com/1/fan_activities/2 正常工作
example.com/2/fan_activities/2 也有效
example.com/anythingatall/fan_activities/2 也有效

我想这样做,以便url的fanzone_owner_id必须匹配fan_activity的外键,否则我们会重定向到404.

我是否会对控制​​器中的网址进行验证检查?我不确定这种方法是否正确

2 个答案:

答案 0 :(得分:0)

基于我建议使用nested routes的信息。

resources :fanzone_owner do
 resources :fan_receive
end

为此,您还应该nested attributes准备就绪,否则上述路由根本没有任何意义。 This tutorial可能会有所帮助。

答案 1 :(得分:0)

我弄清楚出了什么问题。我只需要使用控制器中url的params进行show动作。

在fan_activities_controller.rb

class Post < ActiveRecord::Base
  require 'time'

  belongs_to :user, foreign_key: :author
  belongs_to :category

  has_many :comments
  has_many :comment_users, through: :comments, source: 'user'

  has_many :likes
  has_many :like_users, through: :likes, source: 'user'

  validates :title, presence: true

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