这是有关更新现有记录的模型值的流程问题。假设我有一个用户模型。用户通过设计认证注册名称和电子邮件。然后我在网站上还有两个表单来收集额外的输入。
表单1存储付款数据并使用def更新方法。让我们说更新方法有一些条带代码。
表单2只询问用户喜欢的颜色,并希望将其保存到模型中。表单2仍然可以使用带有一些if语句的update方法,或者我们是否需要一个指向def color等方法的自定义路由。
我在使用表单2更新模型时遇到了问题。而不是发布详细信息(完成那个。还没有解决方案),我想知道最佳流程是什么。将数据插入模型应该非常简单。我想我错过了一些基本的东西。
答案 0 :(得分:1)
表格2仍然可以使用更新方法
是
<强>的Ajax 强>
你要找的是ajax - Asynchronous Javascript & XML - 一种向你的Rails服务器发送请求的方法超出典型HTTP流的范围。
你必须记住,由于构建在HTTP上,Rails是stateless。这意味着它绝对没有“记忆”,当然,除非您存储数据以备将来使用。
这一点很重要的原因是,当您向后端发送“更新”请求时,如果您已经发送了请求,则无关紧要;它只会接收您发送的数据&amp;盲目地执行它想要的任务:
#view
<%= form_for @user, method: :patch, remote: true, id: "form1" do |f| %>
<%= f.text_field :color %>
<%= f.submit %>
<% end %>
<%= form_for @user, method :patch, remote: true, id: "form2" do |f| %>
<%= f.text_field :other_input %>
<%= f.submit %>
<% end %>
您可以read up more about Rails UJS here - 两个表单都会将请求发送到update
方法,并会发送不同的数据。这将使您能够通过两个单独的表单发送所需的数据
-
<强>响应强>
如果您想从表单中捕获响应,您将能够创建以下Javascript:
#app/assets/javascripts/application.js
$(document).on("ajax:success", "#form1", function(status, data, xhr){
// something here
});