1

我正在使用设计进行身份验证,并且在用户 ( has_many :products) 和产品模型 ( belongs_to :user) 之间建立了关联。

我的路线文件是

resources :users do 
  resources :products
end

现在发生的情况是,ID 为 3 at 的/users/3/products用户也可以看到 at 的内容/users/4/products。我想限制它。我不想/users/3/products看到什么/users/4/products等等(不是针对这两个用户,而是针对所有人)。我该怎么做 ?我应该有一个用户控制器吗?我现在没有。如果我有控制器,我该怎么做?我在想也许重定向它?

谢谢

4

1 回答 1

2

您可以before_filter在您的产品控制器中添加一个:

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

此外,在 products 控制器中,您只能检索属于的产品current_user

def index
  @products = current_user.products # will fetch all products with a user_id matching the current user's
end

如果您使用上述方法,则 URL 中实际上不需要用户 ID,您可以使用类似./users/products/products.

于 2013-05-05T07:23:53.067 回答