2015-04-06 62 views
0

約會屬於時間表。如果不使用friendly_id,下面的代碼工作,如預期,打造約會列表:通過friendly_id slug搜索belongs_to協會

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

然而,當我送塞,而不是ID的,事情變得更加複雜。 喜歡的東西Appointment.where(schedule.slug =「MYSLUG」)是我喜歡做的,但我結束了這片O'醜:

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])