Rails 4 - 通过多种形式更新模型

时间:2014-09-04 05:37:05

标签: ruby-on-rails

这是有关更新现有记录的模型值的流程问题。假设我有一个用户模型。用户通过设计认证注册名称和电子邮件。然后我在网站上还有两个表单来收集额外的输入。

表单1存储付款数据并使用def更新方法。让我们说更新方法有一些条带代码。

表单2只询问用户喜欢的颜色,并希望将其保存到模型中。表单2仍然可以使用带有一些if语句的update方法,或者我们是否需要一个指向def color等方法的自定义路由。

我在使用表单2更新模型时遇到了问题。而不是发布详细信息(完成那个。还没有解决方案),我想知道最佳流程是什么。将数据插入模型应该非常简单。我想我错过了一些基本的东西。

1 个答案:

答案 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
});