如何在javascript中访问当前rails对象id

How to access the current rails object id in javascript

本文关键字:rails 对象 id 访问 javascript      更新时间:2023-09-26

如果我在一个视图上,我如何访问该视图当前表示的ruby对象的ID?

例如,如果我在blah.com/jobs/1上,如何获得1?

我想过修剪当前的URL,但这似乎太脆弱了,尤其是考虑到我有嵌套的资源。我能想到的唯一另一个简单的方法是有一个隐藏的字段,但在没有任何表单的显示页面上有隐藏的输入似乎很愚蠢。

解析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的顶级容器,因此您可以使用它。

我建议使用以下方法之一:

  1. 正如Jamsi所建议的,将<%= params[:id] %><%= @job[:id] %>直接包含在javascript:中

    var id = <%= @job[:id] %>

  2. 如果您的javascript在一个单独的文件中,请遵循Mu的建议。将<%= @job[:id] %>添加到视图的一个html标签中,并对其进行查询

不会只是<%=params[:id]%>会这么做吗?

下面是一个完整的例子,结合已经提供的答案。

使用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');