1. Посылаем запрос при выборе элемента из селекта:
collection_select(:ad, :city_id, City.all, :id, :name, {prompt: 'Выберете город...'}, data: {remote: true, type: :json, url: ads_path})
Запрос уходит на ads_path (то есть экшн index контроллера ads), id города передается в параметре ad[city_id].
2. В экшене возвращаем список объявлений города:
respond_to :json
def index
@city = City.find(params[:ad][:city_id])
respond_with @ads = @city.ads
end
3. На js ловим ответ сервера с данными:
$ ->
$("#ad_city_id").on "ajax:success", (e, data, status, xhr) ->
objects = xhr.responseJSON
В переменной objects будут находиться объявления, которые мы потом рендерим на страницу. То есть вся работа по выводу объявлений на страницу переносится на клиент, т.е. js. Очень удобно это делать с помощью гема handlebars_assets и, соответственно, шаблонов в формате handlebars. Отдавать красивый json можно с помощью гема jbuilder.