在Rails 4上处理AJAX的正确方法是什么?

时间:2016-06-27 10:45:06

标签: javascript jquery ruby-on-rails ruby ajax

在大多数教程中,人们会告诉您为要使用js.erb回复的每个操作创建一个javascript模板,这会导致同时拥有html.erb和{{{} 1}},对于我希望使用AJAX的每个操作,如下所示:

enter image description here

这是对的吗?难道我做错了什么?因为它看起来很糟糕,默认情况下每个视图文件夹中至少会有20个文件。

2 个答案:

答案 0 :(得分:2)

我认为你做得对。您正在使用Rails的AJAX助手,这是一个很好的做法。与使用AJAX的常规方法相比,这有一些优点:

  • JS代码更简洁,更清晰,我们不需要编写一些重复无聊的代码,例如$(" form#id")。on(" submit",function() {})。我们只需要编写主代码来处理响应数据。
  • 不引人注目的JavaScript:JS代码从服务器端呈现。它没有与html一起显示。
  • 我认为拆分为js.erb文件实际上使代码更易于管理。这是个人的想法。

我不知道您的项目有多复杂,所以我不确定,但也许您可以改进以减少部分文件。例如,我注意到您同时拥有删除销毁操作。 索引修改视图可能不需要部分文件。您似乎也处理Json请求。它还使视图文件夹更大。

答案 1 :(得分:1)

是的,它对我来说也很糟糕。但是,如果您使用javascript响应每个方法,则必须为每个方法创建js.erb个模板。

另一种方法是,你想用json而不是脚本来回应。所有ajax代码都将保留在客户端javascript中,并且您将使用json数据回复。

例如。让我们获取特定区域的数据

$.ajax({
  url: "/areas/23",
  dataType: 'json',
  method: 'get',
  success: function(response){
    //OPTION 1
    //response will have all the data
    //handle the value from the response object in displaying


    //OPTION 2
    //If you set dataType: 'html' you can receive html partial from server and make use of it directly
    $("#show-area").html(response); //response will have content of _show.html.erb
  },
  error: function(error){
    console.log(error); //Print errors if it breaks
  }
});


#Controller
def show
  respond_to do |format|
    #OPTIONS 1
    format.json { render json: @area.as_json } 
    #Or have a json.jbuilder partial if you want to send data selectively, ;) There is no escape from partials/templates

    #OPTION 2
    format.html { render partial: "areas/show" } # will render _show.html.erb

  end
end

话虽如此,我认为最终会出现个人偏好。您的偏好会因不同情况而异。您可以根据案例选择其中任何一个。如果有帮助,请告诉我。