我只想显示当前登录用户的详细信息。我已经使用设计创建了身份验证,并且在用户登录后。我创建了一个学生脚手架,用户可以在其中创建一个学生,但我不希望学生由第一个用户创建,显示给登录的第二个用户,第三个用户也是如此。每个用户的详细信息应该单独显示。。有人可以指导我吗?提前致谢。
4 回答
您需要设置模型之间的关联
之后,它可能如下所示:
@students = @user.students.all
在哪里@user = current_user
我猜。
编辑:
为了使其故障安全:
@students = @user.students.all if @user
为避免以后出现问题,仅在控制器未设置用户时设置用户,例如在用户视图中:
@user ||= current_user
这仅在尚未设置时将 @user 设置为 current_user。
设计带有自己的一组帮助程序,其中一个是 current_user,所以如果我想显示当前用户名,我会这样做
<%= current_user.name %>
这假设名称属性在用户模型中
查看设计wiki 了解更多信息
看看CanCan:
CanCan 是 Ruby on Rails 的授权库,它限制给定用户可以访问的资源。
定义能力很简单:
can :read, Student, :user_id => user.id
以上将授予用户仅读取他拥有的学生记录的权限。但是您必须首先进行一些设置工作,例如user_id
在学生表中添加一列,并在用户创建学生时相应地设置此列。
CanCan wiki是一个很好的起点,RailsCasts 涵盖了 CanCan。
为了做你想做的事,你需要在表格中添加一个user_id
字段。然后在模型上students
创建关系并在“用户”模型上创建关系。belongs_to :user
Student
has_many :students
当用户创建学生时,您应该做current_user.students.create(params[:student]
或多部分:
student = current_user.students.build(params[:student]
if student.save
...do some stuff
end
有了这个,你可以使用你的current_user
来只拉他们创建的学生current_user.students