2011-06-04 84 views
0

我的設計工作爲我的用戶類,我試圖添加一些CRUD方法到用戶控制器。我已經讀過關於這個的路由,只要devise_for出現在resources之前,它將優先,否則你只會通過/ users/sign_in或其他方式訪問不存在的記錄。無論如何。Rails路由devise_for /資源CRUD重疊

我有我的CRUD方法工作,甚至一些資源。說用戶有很多擁有者。我可以通過/ users/1/possessions/1查看所有內容,但是當我嘗試刪除它時,我無法訪問Devise current_user方法。我可以通過用params [:user_id]查找用戶來刪除它,然後通過params [:id]查找它的所有權,但如果我只希望登錄的用戶能夠刪除他/她自己的所有物,那麼這並不安全。

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

回答

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 
+0

這是有道理的,但我使用Mongoid,想'Possessions'是公開可見的,從而'Possession'是'embedded_in''用戶',我不能通過根文件('用戶')來訪問它。 此外,這對我遇到的問題確實沒有影響,現在我認爲我的銷燬方法中的'possessions_controller'內必須有另一個原因,'current_user'返回nil。它在show方法中工作,但不在銷燬中。有關於此的任何想法? – Zac 2011-06-05 05:41:35