【问题标题】:Rails 4 - Updating model via multiple formsRails 4 - 通过多种形式更新模型
【发布时间】:2014-09-04 05:37:05
【问题描述】:

这是一个关于更新现有记录的模型值的过程问题。假设我有一个用户模型。用户通过设计身份验证使用姓名和电子邮件进行注册。然后我在网站上多了两个表单来收集额外的输入。

Form 1 存储支付数据并使用 def 更新方法。假设更新方法有一些条带代码。

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

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

【问题讨论】:

  • 您可以为此github.com/schneems/wicked 使用多步骤表单。这包括如何构建多步表单的所有细节,也为此提供了 railscast,因此您可以轻松实现它。
  • 我不认为我想要一个多步骤表单。那将是多个页面上的一种形式,对吗?我想要多个单独的表格。
  • 你必须尊重 CURL 方法。如果 2 个表单将更新模型 A,您将对 2 个表单使用 AsController.update 方法。您可以添加的唯一if 语句是在更新过程后重定向到不同的页面,将信息传递到表单的隐藏字段中。如果这2个表单更新了2个不同的模型AB,那么分别使用AsController.updateBsController.update方法。

标签: ruby-on-rails


【解决方案1】:

form 2 是否还能使用更新方法

是的


Ajax

您将寻找的是 ajax - Asynchronous Javascript & XML - 一种向 Rails 服务器发送请求的方法,超出了典型 HTTP 流的范围

您必须记住,Rails 是基于 HTTP 构建的,它是stateless。这意味着它绝对没有“记忆”,当然,除非您存储数据以备将来使用。

这很重要的原因是,当您将“更新”请求发送到后端时,它不会关心您是否已经发送了请求;它只会获取您发送的数据并盲目地执行它想要的任务:

#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
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-21
    • 1970-01-01
    • 1970-01-01
    • 2013-08-23
    • 1970-01-01
    • 2013-12-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多