请考虑本指南的注释中的示例routing and singular resources这两个示例都将针对'照片#index',但它们是不同的背景。
我想根据访问的路由为用户提供不同的选项。
答案 0 :(得分:1)
有两种方法可以解决此问题。
在users_controller.rb
before_action :set_user, only: [:photos]
def photos
@photos = @user.photos
render "photos/index"
end
private
@user = User.find(params[:id])
在routes.rb
中,您需要添加此路线,
resources :users do
get "photos", on: :member
end
photos_controller.rb
before_action:set_user,仅限:[:照片]
def index
unless @user.nil?
@photos = @user.photots
else
@photos = Photo.all
end
end
private
def set_user
if params[:user_id].present?
@user = User.where(params[:user_id]).first
end
end
答案 1 :(得分:0)
首先,我会将/ users / 1 / photos作为用户控制器的操作。但是,如果你真的想在那里做你说的话,你可以检查照片控制器索引上是否存在user_id参数,并适当地设计你的发现者。
答案 2 :(得分:0)
例如,您可以validate路由与rspec
匹配,如下所示:
expect(:get => "/users/1/photos").to route_to(
:controller => "photos",
:user_id => "1",
)