我正在尝试为嵌套资源的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.
我是否会对控制器中的网址进行验证检查?我不确定这种方法是否正确
答案 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.