如何使我的项功能依赖于user_id

时间:2011-12-06 02:43:27

标签: ruby-on-rails

@item = Item.find(params [:id]),但是这会为我所有登录的用户返回一个值,但我希望它基于已登录用户的id

1 个答案:

答案 0 :(得分:2)

我在理解你的问题时遇到了一些麻烦,所以如果我误解了你的问题,我会提前道歉。

您正在寻找一种方法将搜索范围限制为仅属于当前登录用户的项目吗?

首先需要Item和User之间的关联,如下所示:

class User < ActiveRecord::Base
  has_many :items
end

class Item < ActiveRecord::Base
  belongs_to :user
end

然后,假设您可以使用current_user访问当前登录的用户,您可以限制搜索:

@item = current_user.items.find(params[:id])

编辑:如果您将user_id存储在会话中session[:user_id],那么您可以执行以下操作:

@user = User.find(session[:user_id])
@item = @user.items.find(params[:id])

无论哪种方式,过程都是相同的:从有效的用户对象开始,并使用items关系将范围限制为与该用户关联的项目。

稍微偏离主题,您可能希望避免将user_id直接存储在会话中,因为它很容易被欺骗,允许不必要的访问(然而,这将成为另一个问题的对话)。