Поскольку ваш код Javascript помещен во встроенный файл ruby (.erb), который интерпретируется сервером перед отправкой в браузер клиента, вы можете сгенерировать необходимую переменную JS с помощью фрагмента ruby, например:
var id='#id_for_'+<%= @user.username %>
var id='#comment_info_'+<%= n %>
, а затем используйте его просто как $(id).doSomethingReallyCool();
.
Если вам нужно контролировать значение идентификатора, сгенерированного формой в первом случае, вы можете сделать это, передав идентификатор в хеш htmlпараметры:
f.text_field :username, id:"id_for_#{…}"
Если вы используете ненавязчивый подход JS, вы хотели бы поместить код JS в частичное (.js.erb) и заставить его использовать контроллер, если пользовательский клиент разрешает JS,Например:
class FooController < ApplicationController
def foo_doo
… # some logic
respond_to do |format|
format.js # this will render javascript in file “foo_doo.js.erb” if allowed
format.html { … } # html fallback for unobtrusive javascript
end
end
Это рекомендуемый подход в настоящее время.Теперь проблема в том, что вам нужно передать переменные в код JS.Если эти переменные пришли из формы, поместите их в соответствующие скрытые поля формы.А затем используйте опцию рендера locals
, чтобы они были доступны вашему партиалу, например:
format.js { render 'foo_doo', locals: {n:n} }
Если код JS обновляет шаблон, использующий некоторые переменные, используйте тот же подход:
var id='#comment_info_'+<%= n %>
$(id).replaceWith("<%= j (render partial:…, locals: {…}) %>")