2010-09-05 56 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