Rails路由devise_for / resources CRUD重叠

时间:2011-06-04 08:06:33

标签: ruby-on-rails devise crud

我已经为我的User类工作了,我正在尝试向用户控制器添加一些CRUD方法。我已经阅读了有关此路由的信息,只要devise_for出现在resources之前它将优先,否则您将只通过/ users / sign_in或其他任何方式访问不存在的记录。反正。

我的CRUD方法有效,甚至还有一些资源。假设用户拥有许多拥有权。我可以通过/ users / 1 / possessions / 1查看一个所有物,但是当我尝试删除它时,我无法访问Devise current_user方法。我可以通过使用params [:user_id]查找用户,然后通过params [:id]找到它的所有物来删除,但如果我只希望登录用户能够删除他/她自己的所有物,那就不太安全了

如何在用户模型的CRUD方法中使用Devise的方法?

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

更好的做法可能是不在用户之下嵌套财产路线,而是将其作为/possessions/1和你的财产控制器自己将你的所有发现范围用于current_user,即:。

def index
  @possessions = current_user.possessions
end

def edit
  @possession = current_user.possessions.find(params[:id])
  ...
end

通过这种方式,您可以确保用户只能看到自己的物品,如果他们试图访问其他人的财产,他们将收到404.

Inherited Resources使这很容易做到,所以你可以像这样对控制器进行编码:

class ProjectsController < InheritedResources::Base
  protected
    def collection
      @projects ||= end_of_association_chain.paginate(:page => params[:page])
    end
end