Как получить доступ к текущему идентификатору объекта рельсы в JavaScript - PullRequest
8 голосов
/ 16 марта 2012

Если я нахожусь в представлении, как я могу получить доступ к идентификатору объекта ruby, который в данный момент представлен этим представлением?

Например, если я нахожусь на blah.com/jobs/1, как мне получить 1?

Я думал об обрезке текущего URL, но это кажется слишком хрупким, особенно учитывая, что у меня есть вложенные ресурсы.Единственный простой способ, которым я могу придумать, - это иметь скрытое поле, но глупо иметь скрытый ввод на странице показа, где нет никаких форм.

Ответы [ 4 ]

10 голосов
/ 16 марта 2012

Вы правы в том, что парсинг 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, так что вы можете использовать его вместо этого.

4 голосов
/ 16 марта 2012

Я бы предложил один из следующих вариантов:

  1. Как предложил Джамси, включите <%= params[:id] %> или <%= @job[:id] %> непосредственно в свой javascript:

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

  2. Если ваш javascript находится в отдельном файле, следуйте совету Му.Добавьте <%= @job[:id] %> к одному из html-тегов вашего представления и запросите его.

3 голосов
/ 16 марта 2012

Разве бы <% = params [: id]%> не помогло?

1 голос
/ 24 июня 2015

Вот полный пример, объединяющий из уже предоставленных ответов.

Используя 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');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...