Ruby on rails 将设计用户限制为其自己的视图/关联

Ruby on rails 将设计用户限制为其自己的视图/关联,ruby-on-rails,ruby-on-rails-3,devise,Ruby On Rails,Ruby On Rails 3,Devise,我正在使用Desive进行身份验证,并且在用户(有许多:产品)和产品模型(属于:用户)之间存在关联 我的路由文件是 resources :users do resources :products end 现在发生的是,id为3的用户在/users/3/products上也可以看到/users/4/products上的内容。我想限制这一点。我不希望/users/3/products能够看到/users/4/products上的内容等等(不是针对这两个用户,而是针对所有用户)。我该怎么做?我

我正在使用Desive进行身份验证,并且在用户(
有许多:产品
)和产品模型(
属于:用户
)之间存在关联

我的路由文件是

resources :users do 
  resources :products
end
现在发生的是,id为3的用户在
/users/3/products
上也可以看到
/users/4/products
上的内容。我想限制这一点。我不希望
/users/3/products
能够看到
/users/4/products
上的内容等等(不是针对这两个用户,而是针对所有用户)。我该怎么做?我应该有一个用户控制器吗?我现在没有。如果我有控制器,我怎么做?我在想也许可以重定向它


谢谢

您可以在产品控制器中的过滤器之前添加一个

class ProductsController < ApplicationController
  before_filter :user_is_current_user
  ...
  private

  def user_is_current_user
    unless current_user.id == params[:user_id]
      flash[:notice] = "You may only view your own products."
      redirect_to root_path
    end
  end
end

如果您使用了上面的方法,那么在URL中就不需要用户ID,您可以使用类似于
/users/products
或只是
/products

的路径,实际上我需要ID,稍后我会将其转换为用户名(使用slug(友好ID gem))现在发生的是,我甚至无法进入/user/:ID/products视图。它将所有内容重定向到根路径对不起,这可能应该是
参数[:user\u id]
而不仅仅是
[:id]
。我已经更新了我的答案。你也可以更改过滤器,允许管理员用户查看所有内容。是的,我这样做了,加上我弄乱了路由中的一个成员函数,这就是为什么它会这样做。谢谢:)before_filter
是否也与rails 5兼容?
def index
  @products = current_user.products # will fetch all products with a user_id matching the current user's
end