2012-03-16 1 views
8

私がビュー上にいる場合、そのビューで現在表されているルビーオブジェクトのIDにどのようにアクセスできますか?javascriptの現在のレールオブジェクトIDにアクセスする方法

など。私がいる場合blah.com/jobs/1どのように1を得るのですか?

私は現在のURLをトリミングすることを考えましたが、それはあまりにも脆いと思われます。特にネストされたリソースがあるためです。私が考えることができる唯一の他の簡単な方法は、隠されたフィールドを持つことですが、フォームが存在しないショーページに隠された入力を持つことは愚かなようです。

答えて

10

URLを解析するのは悪い考えです。明示的にどこかに供給する方がよいでしょう。

data-job-id属性をHTMLの標準要素に添付することもできます。<body>も可能です。

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準拠するだろうと、あなたは隠された入力を用いて約マックする必要はないだろう。そして、あなたのJavaScriptは、このようなものを行うことができます。

もちろん、<body>を使用する必要はありません.HTMLにはおそらく既知のidのトップレベルコンテナがあるため、その代わりに使用することができます。

3

<%= params [:id]%>トリックはやってみませんか?

+0

<%= params [:id]%> 'はトリックを行います – Francisco

4

私は、次のいずれかをお勧めしたい:Jamsiが示唆したように、

  1. をあなたのJavaScriptで直接<%= params[:id] %>または<%= @job[:id] %>が含まれています

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

  2. 使いのブラウザではJavaScriptが別々になっている場合Muのアドバイスに従ってください。ビューのhtmlタグの1つに<%= @job[:id] %>を追加してクエリします。

1

ここでは、すでに提供されている回答を組み合わせた完全な例を示します。

<body <%= "data-params-id=#{params[:id]}" if params.has_key?(:id) %> > 

これは、次を使用してアクセスすることができる:

params[:id]及び本体要素を使用

、以下のインラインステートメントは、レイアウトファイルに一般的に使用することができるdata-params-id属性を生成します

はJavaScript:

var dataId = document.body.getAttribute('data-params-id'); 

jQuery:

var dataId = $('body').data('params-id'); 
関連する問題