2010-09-05 54 views
0

我是Rails的新手控制訪問記錄....這是我正在試圖做的....Rails 3中,幫助基於用戶ID

我創建了筆記支架( t.text:content,t.integer:user_id)

我現在想要做的只是允許用戶查看他們創建的筆記。即(== USER_ID)

在我/app/controllers/notes_controller.rb

我有以下幾點:

class NotesController < ApplicationController 
    before_filter :authenticate 
    before_filter :correct_user 
. 
. 
. 
. 



def correct_user 
    @noteuserid = Note.find(:conditions=>["note.user_id=?", @noteuserid]) 
    redirect_to(root_path) unless current_user?(@noteuserid) 
end 

我在瞭解如何編寫以下行的問題:@ noteusefind(:conditions => [「note.user_id =?」,@noteuserid])

任何想法?

感謝

+0

不應該工作的呢?注意:([「user_id =?」,current_user]) – AnApprentice 2010-09-05 22:13:57

回答

1

所以,首先你要找到Note被用戶訪問,然後檢查Note是否有效的用戶。我會嘗試這樣的事情(假設你的current_user?方法檢查給定的用戶ID是否匹配登錄用戶當前:

def correct_user 
    current_note = Note.find(params[:id]) 
    redirect_to(root_path) unless current_user?(current_note.user_id) 
end 

而且,你可能要注意你的correct_user過濾控制器的所有行動過濾器作爲創建註釋的操作可能沒有要注意的註釋的ID。此外,當您查看註釋集合時,您需要以不同的方式進行過濾(例如Note.find(:all, :conditions => { :user_id => current_user_id }))。可能更適合應用正確的邏輯而不是作爲一個通用的過濾器。

最後,你可以看看cancan這個插件, ld用這樣的代碼爲你做了很多艱苦的工作。

+0

謝謝,插件看起來很酷。現在我想在使用任何插件之前學習基礎知識,這就是爲什麼我要經歷這個練習。奇怪的是,上面的代碼不工作,它總是重定向回root_path,是否有一種簡單的方法來在Rails中調試這類問題? – AnApprentice 2010-09-05 22:31:21

+0

在這種情況下,我會做的第一件事就是從日誌開始。檢查您所期望的查詢是否被記錄。如果過濾器重定向,Rails將會記錄日誌,因此值得檢查您期望的過濾器是否重定向到根目錄。如果沒有開始添加自己的日誌記錄來診斷問題。例如。是你的current_user?方法接收和返回你所期望的。 – Shadwell 2010-09-06 08:31:28

3

在Rails 3:

Note.where(:user_id=>current_user) 

或者,您可以與用戶開始...

User.find(current_user_id).notes.find(note_id) 
+0

這會去哪裏?任何方式,你可以把整個街區像上面一樣?我是Rails的新手,所以這將是一個巨大的幫助,看看你在想什麼 – AnApprentice 2010-09-05 22:33:44

+0

這取決於你如何定義你的用戶。如果你還沒有解決這個問題,你需要。我假設你以某種方式設置了一個會話來驗證用戶是誰...... – DGM 2010-09-05 22:37:57

+0

現在我在Rails 3教程手冊中使用了系統:http://railstutorial.org/chapters/sign-in-sign- out#sec:current_user – AnApprentice 2010-09-05 22:41:25