如何确定控制器#动作匹配的路径?

时间:2015-09-29 02:32:02

标签: ruby-on-rails

请考虑本指南的注释中的示例routing and singular resources这两个示例都将针对'照片#index',但它们是不同的背景。

  1. / users / 1 / photos(可能会列出用户的照片)
  2. / photos(列出所有用户'照片)
  3. 我想根据访问的路由为用户提供不同的选项。

3 个答案:

答案 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",
)