我已经为我的User类工作了,我正在尝试向用户控制器添加一些CRUD方法。我已经阅读了有关此路由的信息,只要devise_for
出现在resources
之前它将优先,否则您将只通过/ users / sign_in或其他任何方式访问不存在的记录。反正。
我的CRUD方法有效,甚至还有一些资源。假设用户拥有许多拥有权。我可以通过/ users / 1 / possessions / 1查看一个所有物,但是当我尝试删除它时,我无法访问Devise current_user方法。我可以通过使用params [:user_id]查找用户,然后通过params [:id]找到它的所有物来删除,但如果我只希望登录用户能够删除他/她自己的所有物,那就不太安全了
如何在用户模型的CRUD方法中使用Devise的方法?
答案 0 :(得分:0)
Using "current_user" in models in Ruby on Rails
http://rails-bestpractices.com/posts/47-fetch-current-user-in-models
答案 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