在show方法中使用find和where的Rails 5自定义查询

时间:2018-06-30 02:49:09

标签: ruby-on-rails ruby-on-rails-5

我为这个笨拙的问题表示歉意。我有一个将对象限制为current_user的索引方法,这很好用,但是我仍然可以在show方法中访问该对象。

这只会显示current_user对象

def index
  @todo_lists = TodoList.where(user_id: current_user)
end

不幸的是,如果您知道ID,仍然允许访问该对象

def show
  @todo_list = TodoList.find(params[:id])
end

我正在尝试做什么,但出现undefined method where错误

def show
  @todo_list = TodoList.find(params[:id]).where(user_id: current_user)
end

1 个答案:

答案 0 :(得分:1)

您应“替代”当前查询。当find返回单个对象时,该对象对应于要查询的模型/表。虽然打算在模型中使用where并返回ActiveRecord::Relation的实例,但这是您需要通过id查找TodoList的原因。

之后,您可以使用find,它将查找单个实体(一个记录)并将其作为模型的实例返回。

尝试:

TodoList.where('user_id = ?', current_user).find(params[:id])

请注意,如果current_user是User的一个实例,则假定它具有许多产品,则可以使用该关联来获取所有产品,然后找到所需的产品:

current_user.todo_lists.find(params[:id])