Я думаю, я знаю, что вы после. Единственное, о чем я бы вас просил, это о том, что если у ресурса нет заданий в этом конкретном наборе заданий, его все равно следует включить?
В любом случае, вот один из способов сделать это:
@resources = Resource.all(:include => :jobs,
:conditions => ["jobs.job_set_id = ?", @job_set.id])
Это НЕ будет включать ресурсы, у которых нет заданий, связанных с @ job_set
Итак, я совершенно не прав в своих предположениях, или это было то, что вы после?
Редактировать
Хорошо, это было сложнее, чем я думал. Есть несколько решений, но ни одно из них мне не нравится. Вы можете сделать так:
@resources = Resource.all
@resources.each do |resource|
resource.jobs.all(:conditions => ["jobs.job_set_id = ?", @job_set_id])
end
Но это приведет к тому, что проблема количества запросов 1 + n окажет давление на вашу базу данных.
Вы также можете сделать так:
@resources = Resource.all(:include => :jobs)
@resources.each do |resource|
resource.jobs.select{ |job| job.job_set_id == @job_set_id }
end
Но это приведет к большему потреблению памяти на стороне сервера, поскольку все задания загружаются с нетерпением, а затем циклически перебираются, чтобы увидеть, какой из них соответствует job_set_id.
Проблема с поиском лучшего решения, на мой взгляд, заключается в том, что это то, что должно быть указано в условии SQL JOIN, но я не думаю, что ActiveRecord позволяет нам изменять это в сочетании с активной загрузкой.