Rails - поиск activerecord с использованием отношения has_many и условий на стороне "many" - PullRequest
1 голос
/ 22 августа 2011

Я - полный любитель, и я уверен, что это легко ... но я застрял.

У меня простая ситуация, у меня есть таблица «действий», каждое действие может иметь много «рабочих процессов» или состояний, приводящих к возможному завершению, мне нужно выполнить поиск активной записи в контроллере так, чтобы я в итоге с действиями, у которых нет рабочих процессов, с полем состояния, содержащим «ЗАВЕРШЕНО»

class Activity < ActiveRecord::Base
  has_many :workflows

class Workflow < ActiveRecord::Base
  belongs_to :activity

В контроллере:

Activity.all(:include => :workflows, :conditions => workflows.status != 'COMPLETED')

Это работает в некоторой степени, но вместо того, чтобы давать мне только те виды деятельности, у которых нет рабочих процессов со статусом «ЗАВЕРШЕНО», я получаю результаты, которые включают в себя действия с ЗАВЕРШЕННЫМ рабочим процессом, если это действие имеет и другие, незавершенные рабочие процессы ... надеюсь, это имеет смысл.

Суть в том, как мне вернуть действия, рабочие процессы которых, независимо от их количества, не включают статус "ЗАВЕРШЕНО:?

Спасибо!

1 Ответ

3 голосов
/ 22 августа 2011

Вы пытались увидеть сгенерированный SQL-оператор, используя .to_sql?

Я думаю, должно работать следующее:

Activity.all(:include => :workflows, :joins => :workflows, :conditions => "workflows.status != COMPLETED")

(Вы используете синтаксис rails 2 finder, такЯ полагаю, вы не используете рельсы 3, верно?)

====== ОБНОВЛЕНО ======

Activity.all(:include => :workflows, :conditions => "workflows.status != 'COMPLETED'")

Похоже, что рельсы 2 выполнят внешнее соединениедля :include, поэтому больше не нужно использовать :joins.

Кроме того, COMPLETED следует заключать в кавычки '.

Надеюсь, это работает для вас!

...