Шаблон отсутствует при использовании redirect_to? - PullRequest
1 голос
/ 25 августа 2011

В моем приложении Rails 3 у меня есть контроллер результатов.Когда я на странице show.html.erb с помощью действия show в контроллере, у меня есть ссылка на действие фильтра.Когда действие фильтра выполнено, я хочу, чтобы оно перенаправило обратно на show.html.erb, но по какой-то причине оно продолжает говорить Template is missing Missing template results/filter.Я использую ajax, так что есть файл fitler.js.rjs, но я не могу понять это.Если я удаляю файл filter.js.rjs, он дает мне Unknown action The action 'filter' could not be found for ResultsController

Вот мой код для действия результатов.Любая помощь приветствуется.

def filter
            @dispatches = Dispatch.find_by_message_ids(params[:message_ids]) unless params[:message_ids].blank?

            unless @dispatches.blank? || @input_messages.blank?
            @output_messages = OutputMessage.find_by_dispatch_ids(
                                              @dispatches.collect{|d| d.id }.uniq
                                              )
            end

            respond_to do |format|
                  format.html { redirect_to show_path }
                  format.js
            end
    end

ОБНОВЛЕНИЕ

Вот код на show.html.erb, который вызывает действие фильтра

<%= form_tag(:controller => "results", :action => "filter", :remote => true) do %>

Ответы [ 3 ]

1 голос
/ 25 августа 2011

redirect_to show_path не будет работать; действие "show" ожидает идентификатор или экземпляр объекта. В Rails 3 вы можете перенаправить непосредственно на объект, например, redirect_to @user, который по умолчанию будет использовать метод show для этого объекта. Вы также можете перенаправить на действие с помощью redirect_to (: action => "show",: id => NN), где вы вводите идентификатор вручную и, при необходимости, указываете контроллер. Или старомодным способом redirect_to show_user_path (@user).

0 голосов
/ 25 августа 2011

Получил это на работу.Проблема была в моей форме тега.Он выводил action="/results/filter/?remote=true", поэтому я изменил свой form_tag на:

 <%= form_tag url_for(:controller => "results", :action => "filter"), :remote => true do %>

И это сработало!Но это использует HTML5, теперь я собираюсь найти обходной путь для не-HTML5

0 голосов
/ 25 августа 2011

Ваша форма имеет :remote => true, и это подсказывает rails, что входящий запрос является вызовом ajax, и, следовательно, rails будет искать файл filter.js.rjs и никогда не будет искать html-файл.следовательно, вы получаете ошибку, когда вы удаляете файл rjs.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...