2015-04-17 4 views
0

У меня есть сайт с большим количеством форм AJAX, и теперь я должен создать новое представление js.erb для каждого из них, чтобы просто отправить сообщение, которое в значительной степени говорит но уникален для каждого действия.Объединить все сообщения Ajax через одно действие

Есть ли способ, что я могу объединить или направить одно действие к действию сообщения в контроллере, поэтому мне нужно было только одно представление для обработки всех сообщений JavaScript

Вот что у меня есть:

контроллер:

def some_action 
    { do some things here } 
    respond_to do |format| 
     format.js 
    end 
end 

Вид:

some_action.js.erb

$('#messages').append("<%= escape_javascript(render :partial => 'flash_message') %>"); 

<% if @error == "True" %> 
$('#flash').removeClass().addClass("error").html('<%= escape_javascript(@message) %>'); 
<% else %> 
$('#flash').removeClass().addClass("success").html('<%= escape_javascript(@message) %>'); 
<% end %> 

Скорее всего, в контроллере должно быть одно действие для управления всеми сообщениями, когда никакие другие изменения не нужны.

ответ

0

Вы можете абстрактный, что функциональность в методы экземпляра, что-то вроде этого

def ajax_success(message) 
    @message = message 
    render 'ajax/success' 
end 

def ajax_failure(message) 
    @message = message 
    render 'ajax/failure' 
end 

Тогда в контроллере

def update 
    if (successful) 
    ajax_success 
    else 
    ajax_failure 
    end 
end 

Вы можете определить их в вашем ApplicationController, или в модуле, который включен в любых контроллерах, где вы хотите их использовать.

Есть некоторые проблемы здесь, когда вы хотите иметь действия, которые отвечают на несколько типов контента, но для действий, которые должны отвечать только .js, все должно быть хорошо.

Кроме того, я считаю, что стандартная практика для ответов AJAX, как это, должна была бы вернуть сообщение JSON, а затем иметь некоторую функцию javascript, которая могла бы декодировать ее и соответствующим образом преобразовать страницу.

Смежные вопросы