Javascript Rails-如何在不更改页面和更新视图的情况下提交表单?

Javascript Rails-如何在不更改页面和更新视图的情况下提交表单?,javascript,ruby-on-rails,ajax,stimulusjs,Javascript,Ruby On Rails,Ajax,Stimulusjs,大家好 Im使用rails,在我希望用户(在同一页面上)执行的步骤中: 输入他的地址 提交表格 更新视图以显示地址 我应该使用Stimulis还是Ajax?我不太明白哪个更有用! 因为我尝试使用简单的JS,但它并不干燥,也不是很简单: // file.js document.querySelector(".form").addEventListener('submit', function () { adress_form = document.queryS

大家好

Im使用rails,在我希望用户(在同一页面上)执行的步骤中:

  • 输入他的地址

  • 提交表格

  • 更新视图以显示地址

  • 我应该使用Stimulis还是Ajax?我不太明白哪个更有用! 因为我尝试使用简单的JS,但它并不干燥,也不是很简单:

    // file.js
    
    document.querySelector(".form").addEventListener('submit', function () {
      adress_form = document.querySelector(".adress_form");
      adress_form.style.display="none";
      document.location.reload();
      display_adress = document.querySelector(".display_adress");
      display_adress.style.display = "block";
    });
    
    #file.html.erb
    我的地址是:

    要继续,我希望用户在表单上输入他的地址,提交,更新我的数据库,并使用用户提交的新地址更新视图


    谢谢你的帮助

    您可以在控制器javascript中响应。例如:
    file.html.erb

    <%= simple_form_for(current_user, remote: true, format: :js, html: { id: "addddd"}) do |f| %>
    
    document.getElementById("formId").innerText = "Othe html text or you can call render(*)"
    
    
    users/create.js.erb

    <%= simple_form_for(current_user, remote: true, format: :js, html: { id: "addddd"}) do |f| %>
    
    document.getElementById("formId").innerText = "Othe html text or you can call render(*)"
    
    

    非常感谢你!它可以工作,但如果我想在另一个视图中使用其他字段更新(或创建)我的用户,将再次调用在users/create.js.erb中创建的js:/此外,当我手动刷新页面时,信息不会持久。。。这个问题有解决办法吗?:)您希望在传统后端上创建动态前端(spa页面、后端请求)。这方面的最佳实践是分别开发前端(react、vue、angular等)和beckend(restapi、graphql等)。在传统后端实现这样的功能非常困难和混乱,需要提供特殊的lib(react on rails或其他),如果您希望对某个点发出类似的请求(例如更新用户),则应该在api_控制器中对其进行编码