gpt4 book ai didi

ruby-on-rails - 如何创建弹出窗口以在Rails 3中创建新记录

转载 作者:行者123 更新时间:2023-12-04 05:40:30 25 4
gpt4 key购买 nike

我们有一个要求,即网页必须显示来自联接几个表的所有记录。
我们有一个“添加按钮”-单击按钮后,我必须显示一个弹出窗口,用户将在其中输入必要的详细信息。弹出窗口将有两个按钮,保存和取消。

单击“保存”按钮,应验证字段,如果通过所有验证,则将记录保存到数据库,否则在警报框中显示错误消息。

单击取消按钮将关闭弹出窗口。

单击添加按钮后如何创建弹出窗口?

最佳答案

您需要将服务器端(Rails, Controller ,操作)和客户端(弹出窗口,JavaScript,发送请求)的内容分开。

您的客户端操作(JavaScript代码)应将Rails应用程序视为某些服务器,该服务器将为某些请求返回一些响应。从JavaScript的角度来看,服务器运行的是Rails还是Smalltalk并不重要。

弹出窗口的基本工作流程可能是:

1)打开一个新窗口-这需要JavaScript的客户端 Activity 。使用window.open函数,或者(我谦虚地认为这种方法更好)create a new <div>并使用CSS对其进行样式设置,以便覆盖(一个不错的效果是半透明的背景:background: #ddf; opacity: 0.5;,您仍然可以通过它看到页面的内容) 。

2)在窗口中填写编辑表单-您的客户端脚本应进行类似AJAX的调用(不一定是真正的AJAX,因为在这种情况下,同步请求可能是明智的),以便从Rails获取编辑表单应用。请参阅以下简化示例:

function fillPopupBody(popup) {
var req = new XMLHttpRequest();
req.open("GET","/something/partial_new_form.html",false); // Synchronic request!
req.send(null);
if( req.status == 200 ) {
popup.innerHTML = req.responseText;
return true;
} else {
popup.innerHTML = "<p class='error'>"+req.status+" ("+req.statusText+")</p>";
return false;
}
}

3)在Rails应用程序中准备返回表单的操作-(服务器端)通常这可能是给定资源 Controller 的 new操作,但是呈现时没有布局。

一种替代方法是通过JavaScript构建表单(无需单独获取表单),或者始终将其包括在页面中-默认情况下只是隐藏的,因此JavaScript只需设置其 display属性即可。

4)处理表单提交-您可能希望用户停留在同一页面上,因此您应该拦截表单提交。只需在创建的表单的“submit”事件中添加处理程序,构建请求,发布请求,然后检查服务器响应即可。

Rails将通过您的:create操作返回 响应。您可能已经准备好了,因为./script/rails generate scaffold创建的代码通常是可以的。

如果响应为201(已创建),则可以关闭弹出窗口(display: none)并更新页面以显示新对象-刷新整个页面,或仅获取更改的部分。

如果create操作无法创建对象,则默认情况下,响应代码为422(不可处理的实体),内容为模型错误对象,呈现为JSON或XML。只需以表格形式显示错误即可(让您的JavaScript设置一些预定义元素的innerHTML)。

那是完成任务的“手动”方式。我对JavaScript库有些厌恶(难以解释;-),我更喜欢直接使用DOM。您可能会发现许多Rails助手,它们将使您免于编写JavaScript代码。我猜看:remote => trueform_for参数将是一个很好的起点。

另外,jQuery文档(http://docs.jquery.com/Main_Page)可能是一本好书。

结束这个长篇故事,以下是您对评论所提问题的简短回答:

How do i link controller actions from the popup?



:通过向适当的URL发送HTTP请求:“GET/users/1/notes/new”,“POST/user/1/notes”

How do i close the popup?



:如果弹出窗口是页面元素,则设置display: none;如果弹出窗口是单独的窗口,则调用window.close()

关于ruby-on-rails - 如何创建弹出窗口以在Rails 3中创建新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6770784/

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