我有一个拥有大量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 %>
当没有其他必要的更改时,宁愿在控制器中有一个操作来控制所有消息。
答案 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函数可以解码它并适当地转换页面。