2012-03-16 26 views
8

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

E.g.如果我在blah.com/jobs/1我该如何得到1?

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

回答

10

你说的正确,解析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

3

不只是<%= params [:id]%>做的伎俩?

+0

'<%= params [:id]%>'是否有诀窍 – Francisco 2015-07-08 20:16:13

4

我建议下列之一:

  1. 由于Jamsi建议,包括<%= params[:id] %><%= @job[:id] %>直接在您的javascript:

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

  2. 如果你的JavaScript是在一个单独的文件,按照穆的建议。将<%= @job[:id] %>添加到您的视图的一个html标记中,并对其进行查询。

1

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

使用params[:id]和body元素,下面inline语句会产生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');