加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Ruby’.find’方法只返回第一次出现

发布时间:2020-12-16 22:34:45 所属栏目:百科 来源:网络整理
导读:我有以下模型:用户has_many目标,目标has_many任务,任务has_many day_tasks.我正在尝试编写一个查找所有day_tasks的方法 属于某个用户 have:target_date == Date.today(target_date是day_tasks表中的一列). 我想把结果放到@day_tasks数组中. 我的代码: @us
我有以下模型:用户has_many目标,目标has_many任务,任务has_many day_tasks.我正在尝试编写一个查找所有day_tasks的方法

>属于某个用户
> have:target_date == Date.today(target_date是day_tasks表中的一列).

我想把结果放到@day_tasks数组中.

我的代码:

@user = current_user
@day_tasks = DayTask.find { |x| x.task.goal.user == @user && x.target_date == Date.today }

此代码仅返回与这些条件匹配的第一条记录.我还尝试使用大括号中相同代码的DayTasks.where方法,但我只是一个“错误的参数数(0为1)”错误.有人可以解释为什么我的方法只返回第一次发生,和.find和.where之间的区别是什么?

解决方法

你写这个:
@day_tasks = DayTask.find { |x| x.task.goal.user == @user && x.target_date == Date.today }

这里的find方法实际上是回溯到Enumerable的find,它是一个用于detect的别名,它是一个块,它将返回与该块的条件匹配的集合中的第一个元素,或者返回nil.

为了解决这个问题,您将需要使用内置于ActiveRecord中的AREL的查询内容.

DayTask.joins(:task => { :goals => :user }).where("users.id = ? AND day_tasks.target_date = ?",@user.id,Date.today)

这里的连接方法将加入与DayTask模型和相关模型中的关联名称相匹配的表.这意味着您必须在DayTask模型上拥有一个任务关联,该模型有一个目标关联,目标模型有一个用于用户.

然后,那里将构造一个SQL条件,该条件将查询联接以查找属于用户的所有记录,并具有今天的target_date.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读