2015-04-06 2 views
0

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

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

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

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

Это работает, но кажется, что я что делает его слишком сложным.

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

ответ

0

Я бы выбрал пару областей. Это помогает сохранить ваш код читаемым и многоразовым (вы можете использовать тот же метод 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])