了解javascript、ruby和rails中嵌入的ActiveRecord调用

了解javascript、ruby和rails中嵌入的ActiveRecord调用,javascript,ruby-on-rails,activerecord,Javascript,Ruby On Rails,Activerecord,我试图理解javascript中嵌入的ActiveRecord调用是如何工作的。我在做一个项目。在某一点上,获取ActiveRecord类的最后一个实例的id会很有帮助。因此,我在javascript中有如下内容: 然后我有一个dropzone来创建新的内容实例,这些实例也会被保存。 但是,在添加新实例后,的值即使在刷新页面后也不会更改(我还尝试转到其他页面并返回,但它不起作用)。但是,我在我的rails控制台上检查,很明显新实例在数据库中。之后,我测试了几次,发现代码的值只有在我更改js文件

我试图理解javascript中嵌入的ActiveRecord调用是如何工作的。我在做一个项目。在某一点上,获取ActiveRecord类的最后一个实例的id会很有帮助。因此,我在javascript中有如下内容:

然后我有一个dropzone来创建新的内容实例,这些实例也会被保存。 但是,在添加新实例后,
的值即使在刷新页面后也不会更改(我还尝试转到其他页面并返回,但它不起作用)。但是,我在我的rails控制台上检查,很明显新实例在数据库中。之后,我测试了几次,发现代码的值只有在我更改js文件时才会更新。

那么ActiveRecord调用在javascript中是如何工作的呢?有没有一种方法可以让它不断地更新自己,或者在它被调用时进行更新?

这取决于Javascript文件的位置。每当您看到这些ERB标记时,请记住它们包含嵌入的Ruby代码,该代码在服务器呈现响应时立即执行。浏览器看到的Javascript文件,中没有任何
垃圾;它被ERB表达式打印出来的任何值所取代。(在这种情况下,它可能打印出呈现页面时数据库中最后一个内容对象的ID号

您可以自己验证这一点:在Chrome中加载相关页面,然后打开开发人员控制台,找到Javascript文件或代码段,然后查找该行。Javascript代码没有在每次运行JS代码时执行Ruby代码从数据库获取最新的ID;相反,某个ID号将硬编码到其中

因此,从某种意义上说,这并不是Javascript中嵌入的ActiveRecord调用,理解这一点很重要;这是一个在服务器上运行的ActuvReCordd调用,它吐出一个值(ID号),即<强>正好发生坐在一段JavaScript代码的中间。同样的ActiveRecord调用可以在一个
.html.erb
视图模板中运行,并且它会以完全相同的方式吐出数字

您还询问如何让Javascript在每次运行时动态返回正确的ID值。这是一个单独的问题,基本上答案是,这就是AJAX调用的目的。但是,在以一种有用且安全的方式实现AJAX调用之前,理解并使用上述概念是非常重要的


简而言之,AJAX调用意味着您设置了一些Javascript代码,当它被触发时,会向您的服务器发出一个单独的请求(这意味着一个新的路由和一个新的控制器操作,可能还有一个新的视图模板,这取决于您想要发送回Javascript代码的内容)。服务器返回一个非常小的值(通常为JSON格式),Javascript代码接收并使用该值对页面显示进行更改。

谢谢!你的解释很清楚。这很有帮助!