поиск ассоциации own_to через слаг friendly_id

Встреча относится к расписанию. Без использования friendly_id следующий код работает, как и ожидалось, для создания списка встреч:

def show
    @appointments = Appointment.where(schedule_id: params[:id])
end

Однако, когда я отправляю слаг вместо идентификатора, все становится сложнее. Что-то вроде Appointment.where(schedule.slug = "MYSLUG") - это то, что я хотел бы сделать, но в итоге я получил вот это уродство:

def show
    @appointments = Appointment.where(schedule_id: Schedule.where(slug: params[:id]))
end

Это работает, но кажется, что я слишком усложняю.

Предложения по улучшению этого кода принимаются с благодарностью.


person Hoffa    schedule 06.04.2015    source источник


Ответы (1)


Я бы взял пару прицелов. Это помогает сделать ваш код читабельным и пригодным для повторного использования (вы можете использовать тот же метод Schedule.for_slug при поиске расписаний и встреч).

# class Schedule
def self.for_slug(slug)
  where(slug: slug)
end

# class Appointment
def self.for_schedule_slug(slug)
  joins(:schedule).
    merge(Schedule.for_slug(slug))
end

Соедините их вот так

appointments = Appointment.for_schedule_slug(params[:id])
person messanjah    schedule 06.04.2015