Rails:在建立时检查/在保存对象之前检查是否存在符合特定条件的关联?

时间:2014-06-13 16:24:47

标签: ruby-on-rails ruby ruby-on-rails-3 activerecord ruby-on-rails-4

我有一个名为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

由于

1 个答案:

答案 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?而不是selectempty?

if timesheet.timesheet_rows.any? { |tr| tr.job_id == n }
  # Do something
else 
  timesheet.timesheet_rows.build(job_id: n)
end