Я бы сделал это с помощью before_filter
обратного вызова:
class TracksController < AC
before_filter :ensure_track, :only => [ :create, :destroy ]
private
def ensure_track
if Product
@product = Product.find(params[:product_id])
@track = @product.tracks.create(params[:track])
elsif Release
@release = Release.find(params[:release_id])
@track = @release.tracks.create(params[:track])
end
end
end
Так что с помощью этой настройки гарантируется, что у вас есть переменная экземпляра @track в ваших методах создания и уничтожения, потому что ensure_track
получаетвызывается перед этими двумя методами.
Я не уверен, хотя, если логика, которую вы применяете, имеет смысл ... Почему вы хотите проверить, существует ли константа с именем Product
, и если нет, есликонстанта с именем Release
делает?Может быть, вопрос в том, присутствует ли params[:product_id]
или params[:release_id]
!?
Но это другой вопрос:)
ОБНОВЛЕНИЕ: См. Руководство по контроллеру действий Rails для фильтров.