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



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

我理解你的问题有一点困难,所以如果我误解了你的问题,我提前道歉。

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

首先需要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])

无论哪种方法,过程都是一样的:从一个有效的user对象开始,并使用items关系将作用域限制为与该用户关联的项。

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

最新更新