После удаления записи в Rails 3 обновленное представление не обновляется

Я имею дело с основным отношением один-ко-многим, когда я удаляю запись со многих сторон. Модели являются "местах" и "search_terms", где места имеет has_many search_terms. Когда я создаю новую запись, представление обновляется, и новый search_term добавляется в список. Однако при удалении записи search_term представление не обновляется, даже если оно удаляет запись и запускает метод "show" для Place.

Я новичок в рельсах 3, так что не могу понять, что здесь происходит...

Приветствия, Gearoid.

Редактировать: метод уничтожения контроллера search_terms:

def destroy
    @search_term = SearchTerm.find(params[:id])
    @search_term.destroy

    @place = Place.find(params[:place_id])
    redirect_to place_path(@place)    
end

Метод показа контроллера мест:

def show
    @place = Place.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @place }
     end
end

1 ответ

Я мог бы неправильно понять вас, не могли бы вы опубликовать код вашего контроллера?

Это происходит через AJAX? Если нет, можете ли вы перенаправить на Show вместо того, чтобы просто перерисовать его? Это, вероятно, предпочтительный опыт для пользователя в любом случае.

ОБНОВИТЬ

Хорошо, если это происходит через ajax, тогда проблема проста. Ваш destroy действие только ожидает нормальное событие браузера и делает redirect_to вызов. Ajax-вызов не знает, как с этим справиться, и просто сидит там. Вы, вероятно, можете увидеть код перенаправления в чем-то вроде Firebug.

Я не очень знаком с jquery-rails (я предпочитаю писать все свои js самостоятельно, потому что я анальный). Вы можете иметь destroy Действие возвращает формат JS, например, так:

def destroy
    @search_term = SearchTerm.find(params[:id])
    @search_term.destroy

    @place = Place.find(params[:place_id])
    respond_to do |format|
        format.html { redirect_to place_path(@place) }
        format.js { render :nothing => true }
    end
end

Это даст вызывающему ajax сигнал о том, что он сделал свое дело. Ваш javascript все равно должен будет разумно обрабатывать этот ответ, как, например, удалить элемент из DOM.

Другие вопросы по тегам