通过一个Action组合所有Ajax消息

时间:2015-04-17 14:40:50

标签: javascript ruby-on-rails ajax

我有一个拥有大量AJAX表单的网站,因为现在我必须为每个表单创建一个新的js.erb视图,只发布一条消息,该消息几乎已经完成,但每个动作都是唯一的

是否有一种方法可以将一个操作组合或转发到控制器中的消息操作,因此我只需要一个视图来处理所有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 %>

当没有其他必要的更改时,宁愿在控制器中有一个操作来控制所有消息。

1 个答案:

答案 0 :(得分: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函数可以解码它并适当地转换页面。