【问题标题】:How to access the current rails object id in javascript如何在javascript中访问当前的rails对象ID
【发布时间】:2012-03-16 07:13:01
【问题描述】:
如果我在一个视图上,如何访问当前由该视图表示的 ruby 对象的 ID?
例如如果我在 blah.com/jobs/1 上,我如何获得 1?
我曾考虑修剪当前 URL,但这似乎太脆弱了,尤其是考虑到我有嵌套资源。我能想到的唯一其他简单方法是设置一个隐藏字段,但在没有任何表单的显示页面上设置隐藏输入似乎很愚蠢。
【问题讨论】:
标签:
javascript
ruby-on-rails
ruby
ruby-on-rails-3
【解决方案1】:
你说得对,解析 URL 是个坏主意,你最好在某个地方明确地提供它。
您可以将data-job-id 属性附加到HTML 中的标准元素,甚至可能是<body>。然后你的 JavaScript 可以做这样的事情:
var id;
var $body = $('body');
if(id = $body.data('job-id'))
// Do some job things.
else if(id = $body('user-id'))
// Do some user things.
而且您仍然符合 HTML5 标准,而且您不必为隐藏输入而烦恼。
当然,您不必使用 <body>,您的 HTML 可能有一些顶级容器,其中包含已知的 id,因此您可以使用它。
【解决方案2】:
我建议以下之一:
-
按照 Jamsi 的建议,直接在您的 javascript 中包含 <%= params[:id] %> 或 <%= @job[:id] %>:
var id = <%= @job[:id] %>
如果您的 javascript 在单独的文件中,请遵循 Mu 的建议。将<%= @job[:id] %> 添加到您的视图的 html 标记之一,并对其进行查询。
【解决方案4】:
这是一个完整的例子,结合了已经提供的答案。
使用params[:id] 和body 元素,以下内联语句将生成data-params-id 属性,可以在布局文件中通用:
<body <%= "data-params-id=#{params[:id]}" if params.has_key?(:id) %> >
然后可以通过以下方式访问:
JavaScript:
var dataId = document.body.getAttribute('data-params-id');
jQuery:
var dataId = $('body').data('params-id');