首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Rails传递ActiveRecord::params中的关系?

Rails传递ActiveRecord::params中的关系?
EN

Stack Overflow用户
提问于 2012-12-06 20:44:10
回答 2查看 990关注 0票数 0

我正在向我的控制器操作中的一个发出AJAX请求,该操作负责为javascript函数提供JSON服务,而javascript函数则根据我视图中的数据生成svg。

但是,我正在处理的数据也需要在视图内的一个表中表示,而且我不希望该查询必须多次针对数据库运行,所以我想知道是否可以只对页面的初始请求执行查询,然后使用params散列下的AJAX将其传递给我的其他控制器?

为了简化这个问题,这里概述了当前的工作流程:

页面请求->查询->视图服务-> AJAX GET请求->查询->生成SVG

我想要的:

页面请求->查询->视图服务-> AJAX GET请求->生成SVG

我以为我可以简单地在AJAX请求中将关系作为param传递,但是它不是将关系作为ActiveRecord::Relation传递,而是将其作为字符串传递:

代码语言:javascript
运行
复制
"#<ActiveRecord::Relation:0x00000009137fc8>":String

我还尝试将其存储到会话中,例如:

代码语言:javascript
运行
复制
session[:foo] = @bar

但我遇到了以下错误信息,这使我相信会话不能存储关系?

无法使用默认的proc转储哈希

这种工作流程的首选解决方案是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-06 21:59:32

ActiveRecord::Relation是一个内部Rails对象,它不是JavaScript的“外部世界”所知道的东西。(理论上,您可以序列化它,然后反序列化它.但这只是个坏主意:-)。所以不,这不是正确的方法。您可以在会话中保存对象本身(查询的结果,而不是ActiveRecord::Relation),尽管这通常不是很好的实践。

那么,你如何才能实现你想要的呢?

首先,Rails倾向于缓存大多数数据库查询,因此在进行优化之前,请确保需要对其进行优化。

假设是这样的话,您似乎要做两件事情:显示查询的结果,然后发出生成SVG的不同请求( AJAX请求)。这两种方法不是完全不同的(很明显,在某些方面是相关的),但在形式上是不同的,在不同的时间运行。这将提出两种不同的方法。

如果它们非常接近--也就是说,您在第一个视图中拥有您所需的90%,那么您也可以在第一个视图中添加一个隐藏字段或未显示的值,在JS中激发AJAX查询页面(DOM)以获取生成SVG所需的值。

在某些情况下,我看到人们在HTML中使用data-属性以更结构化的形式保存属性值,这种形式很容易通过JS访问,从而有效地将完整的对象序列化为HTML中未显示的数据。

但在进行此操作之前,请确保正在优化需要优化的内容:-)

票数 1
EN

Stack Overflow用户

发布于 2013-12-15 14:09:19

你可以这样做:

变量关系= '<%= @criteria.where_values_hash.to_json.html_safe %>‘

然后,可以在"data“中的ajax请求中发送此关系var。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13752198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档