Jquery 访问`application.js中Ruby变量的布尔值`

Jquery 访问`application.js中Ruby变量的布尔值`,jquery,ruby-on-rails,erb,Jquery,Ruby On Rails,Erb,我有一个div,当用户单击链接时我会隐藏它,当他们再次单击它时会显示出来。如果用户选择隐藏它,我们希望当用户返回时,div被折叠,因此我们在用户数据库中添加了一个布尔列hide\u todo,并且我添加了一个方法来测试user\u controller中的值。隐藏是通过jQuery完成的,如果用户单击hide,我们希望将hide\u todo的值更改为true,如果用户单击Show则更改为false。如何在application.js中访问Ruby变量?在js中访问Ruby变量有三种方法: A)

我有一个
div
,当用户单击链接时我会隐藏它,当他们再次单击它时会显示出来。如果用户选择隐藏它,我们希望当用户返回时,
div
被折叠,因此我们在用户数据库中添加了一个布尔列
hide\u todo
,并且我添加了一个方法来测试
user\u controller
中的值。隐藏是通过jQuery完成的,如果用户单击
hide
,我们希望将
hide\u todo
的值更改为true,如果用户单击
Show
则更改为false。如何在
application.js
中访问Ruby变量?

在js中访问Ruby变量有三种方法:

A) 如果将rails 3.1+与资产管道一起使用,可以向文件中添加.erb扩展名,如下所示:“application.js.erb”。现在你可以在.js里面使用erb标签了,这是一种奇怪的方式,只有在特殊情况下才有意义

B) 通常,您会将需要的数据添加到HTML文档的DOM中,并从中检索数据

例如,在您的erb(或haml中的类似方式)模板中,执行以下操作:

<div id="collapsable" data-show="<%= model.hide.todo%>"> </div>
C) 另一种方法是进行ajax调用,该调用将从rails应用程序返回数据


在您的情况下,我推荐第二种方法。

我们最终使用了
$.get('toggle_hide')
,向控制器添加一个方法,以切换布尔值并将其映射到
route.rb
中的资源。谢谢你的建议

我不会用jQuery隐藏它,而是在渲染时用
display:none
向该元素添加一个类,以防止内容闪烁。如果要保存div的状态,需要使用ajax。
hide_todo = $("#collapsable").data("show");