2010-10-11 99 views
1

真的可以用你的幫助,瞭解這個複雜的軌道問題,我一直在敲打由靠在牆上頭...的form_for嵌套資源權限(Y型)

我有以下型號:

Permissions (user_id, role_id, project_id) 
Roles (id, name) 
Projects (id, name) 

權限是角色和項目的Y模型。

我努力使一個表單,允許用戶添加或更新用戶的項目許可

在控制器中,我有:

@project = Space.find(params[:project_id]) 
@permission = @project.permissions.find_by_user_id(params[:user_id]) 

然後在視圖:

<%=form_for [:space, @permission] do |f| %>.... 

但是這是行不通的,錯誤:

  • 如果(用戶&項目)的標準,不具備在任何數據庫記錄:「未定義的方法`MODEL_NAME」的NilClass:類」

  • 如果在一個數據庫中的記錄,這意味着用戶確實有在這個項目上的角色:"No route matches {:action=>"destroy", :controller=>"permissions", :project_id=>#<Permission project_id: 3, role_id: 2, user_id: 13>}"

理想情況下,我想這種形式來顯示當前的權限,如果對於任何給定的(使用/項目)......如果沒有當前的權限,我希望該人能夠創建一個記錄。

任何有關Rails 3中這種類型關係的經驗?感謝您提供任何可以發送給我的提示。

路線文件(這是專門針對這些車型的部分)

resources :projects do 
    resources :photos, :permissions 
    collection do 
     get 'yourcurrentprojects' 
    end 
end 

控制器 - 路徑,用戶被給予選項CRUD權限:/projects/3/permissions - 我相信我會想使用權限。 rb def顯示和def更新以獲取和設置權限?

+0

剛剛更新如此「進度」仍然無法正常工作 – AnApprentice 2010-10-12 00:24:40

+0

Was able將FORM更新爲「<%= form_for [:project,@permission] do | f |」 %>「,但這隻對創建新權限有用,如何顯示當前權限,然後允許用戶創建/更新?謝謝! – AnApprentice 2010-10-12 00:27:17

+0

也試過」@permission = @ project.permissions.find_by_user_id(params [:user_id] )「但是得到:」未定義的方法'模型名稱爲NilClass:類「 – AnApprentice 2010-10-12 00:51:55

回答

2

對於第一個錯誤,你有一個零對象,你應該傳遞一個空白對象,無論你傳遞對象的形式,例如@permission ||= @project.permissions.new(假設它是引起零對象的權限對象,或者更有愛好者@project.permissions.find_or_initialize_by_user_id(params[:user_id])

對於第二個錯誤,它試圖映射到銷燬是奇怪的,它應該試圖映射到:update操作是否正確?運行rake routes以查看應用程序中的所有路由以驗證PUT/projects /: project_id/permissions /:id操作存在並映射到權限#update

+0

@Jeremy,感謝你這麼做......我只是用你的建議更新了我的權限控制器:「@permission = @ project.permissions.find_or_initialize_by_user_id(params [:user_id])」沒有錯誤,但在日誌中,它不是查詢權限表。 – AnApprentice 2010-10-12 05:24:02

+0

@Jeremy,我的錯誤是...你可以跟我說說它顯示當前設置的表單,如果有的話,並允許用戶修改......這是正確的設置嗎? 「<%= form_for [:project,@permission] do | f |%>」 – AnApprentice 2010-10-12 05:26:27

+0

關於Rake Routes,它們看起來不錯,我猜這是與form_for標記有關的......「space_permission PUT/projects /: project_id/permissions /:id(。:format){:controller =>「permissions」,:action =>「update」}「 – AnApprentice 2010-10-12 05:28:38