У меня есть следующие модели
class User < ActiveRecord::Base
has_many :occupations, :dependent => :destroy
has_many :submitted_jobs, :class_name => 'Job', :foreign_key => 'customer_id'
has_many :assigned_jobs, :class_name => 'Job', :foreign_key => 'employee_id'
end
class Job < ActiveRecord::Base
belongs_to :customer, :class_name => 'User', :foreign_key => 'customer_id'
belongs_to :employee, :class_name => 'User', :foreign_key => 'employee_id'
belongs_to :field
end
class Occupation < ActiveRecord::Base
belongs_to :user
belongs_to :field
belongs_to :expertise
end
вместе с Field
(только имя и идентификатор) и Expertise
(имя и целое число).
Мне нужно создать фильтр, который работает как следующий псевдокод
select * from jobs where employee_id == current_user_id
or employee_id == 0
and current_user has occupation where occupation.field == job.field
and if job.customer has occupation where occupation.field == job.field
current_user.occupations must include an occupation where field == job.field
and expertise.rank > job.customer.occupation.expertise.rank
Вы можете видеть, как я быстро исчерпал свои знания SQL с помощью запроса такого комплекса.
Как бы вы это сделали? Хороший SQL был бы хорош, но если человек из Rails может указать мне правильный путь сделать это с помощью методов ActiveRecord, это тоже замечательно. Или, может быть, я не очень хорошо структурирую свои модели; Я открыт для всевозможных предложений.
Спасибо!