gpt4 book ai didi

javascript - Rails + simple_form + Remote_true + 自定义 Controller : how to handle different form actions for 'new' and 'edit' ?

转载 作者:行者123 更新时间:2023-11-28 00:48:55 27 4
gpt4 key购买 nike

我基本上遵循本教程:http://www.gotealeaf.com/blog/the-detailed-guide-on-how-ajax-works-with-ruby-on-rails有一个变体:在为“任务”( Controller 、模型、 View ...)创建支架后,我创建了一个名为“demo”的新 Controller 来测试 ajax 方式。因此“演示” Controller 具有以下操作:index、new_task、create_task、edit_task、update_task。路线也有所调整。

当我渲染表单时(app/views/demo/_form.html.erb)

<%= simple_form_for @task, remote: true do |f|   %>
<%= f.input :description %>
<%= f.input :deadline %>
<%= f.button :submit %>
<% end %>

“action”的形式将是“/tasks”,对应于“controller:tasks, action:create”,但该 Controller 用于“old html”方式,而 ajax 内容位于“demo” Controller 中。

因此,根据在网上找到的一些答案,我添加了“url”参数:

<%= simple_form_for @task, remote: true, url: '/demo/create_task' do |f|   %>
<%= f.input :description %>
<%= f.input :deadline %>
<%= f.button :submit %>
<% end %>

在这种情况下,它非常适合“新建/创建”操作。但是当需要更新模型时,应该使用“/demo/update_task”路径。 Rails 的处理方法是什么?

  1. 在表单前添加一行:<% url = @task.new_record? ? "/demo/create_task": "/demo/update_task?id=#{@task.id}"%>

  2. 有两种不同的表单,一种用于创建,另一种用于编辑,因此“new_task.js.erb”将指向“_form_for_creating.html.erb”,“edit_task.js.erb”将指向另一个一。实际上不是很干。

  3. 更丑陋的是:“任务” Controller 重定向到“演示” Controller 中的“update_task”。我不会依赖于此,因为任务 Controller 应该在经过一些测试后被删除。

最佳答案

我最终选择在表单前添加一行:

<% url = @task.new_record? ? "/demo/create_task" : "/demo/update_task?id=#{@task.id}" %>
<%= simple_form_for @task, remote: true, url: url do |f| %>
<%= f.input :description %>
<%= f.input :deadline %>
<%= f.button :submit %>
<% end %>

我觉得它并不完美,但它有效。

当然还有一些需要调整的地方:

  • 添加路由补丁“demo/update_task”
  • 演示 Controller 中的
  • update_task应在更新属性后加载所有任务

关于javascript - Rails + simple_form + Remote_true + 自定义 Controller : how to handle different form actions for 'new' and 'edit' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27021672/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com