我有一个名为Timesheet的模型,它有许多TimesheetRows。 TimesheetRow属于一份工作。
class Timesheet < ActiveRecord::Base
has_many :timesheet_rows, inverse_of: timesheet
end
class TimesheetRow < ActiveRecord::Base
belongs_to :timesheet, inverse_of: timesheet_rows
belongs_to :job
end
在从日志构建时间表对象时,我试图检查是否已经构建了与作业相对应的timesheet_row,如下所示。
timesheet = Timesheet.new()
if timesheet.timesheet_rows.exists?(job_id:n)
#Do something
else
timesheet.timesheet_rows.build(job_id:n)
end
我试过.exists?(条件),。find(:all,condition),. find_by_job_id(n),。where(condition)等。所有来自数据库的查询,因此在这里没有用。
我已经浏览了几个小时,寻找一些神奇的方法但却找不到任何方法。真的,我只需要遍历所有关联吗?
类似question。
由于
答案 0 :(得分:1)
尝试使用ruby的select
方法,然后检查结果数组是否为空。
if timesheet.timesheet_rows.select { |tr| tr.job_id == n }.empty?
timesheet.timesheet_rows.build(job_id: n)
else
# Do something
end
正如@Bot在评论中建议的那样,您还可以使用any?
而不是select
和empty?
。
if timesheet.timesheet_rows.any? { |tr| tr.job_id == n }
# Do something
else
timesheet.timesheet_rows.build(job_id: n)
end