У меня есть div
, который я спрятал, когда пользователь нажимает на ссылку и показывает, когда они нажмут ее снова. Мы хотим, чтобы div
рухнул, когда пользователь вернулся, если они решили скрыть его, поэтому мы добавили логический столбец hide_todo
в нашу пользовательскую базу данных, и я добавил метод для проверки значения в user_controller
. Скрытие выполняется с помощью jQuery, и мы хотим изменить значение hide_todo
на true, если пользователь нажимает Hide
и false, когда пользователь нажимает Show
. Как получить доступ к переменной Ruby в application.js
?Доступ к логическому значению переменной Ruby в `application.js`
ответ
Ну, мы закончили с использованием $.get('toggle_hide');
, добавив метод контроллеру для переключения логического и сопоставления с ресурсами в route.rb
. Спасибо за предложения, хотя!
Есть 3 способа доступа рубин переменных в ЯШАХ:
A) Если вы используете рельсы 3.1+ с трубопроводом активов, вы можете добавить .erb расширение в файл, как это: «application.js. Еврорадио». Теперь вы можете использовать метки erb внутри .js <% ruby.code(); %> Это, я бы сказал, странный способ сделать это, и это будет восприниматься только в особых случаях.
B) Обычно вы добавляете данные, необходимые для DOM вашего документа HTML, и извлекаете данные из него.
Например, в вашем ERB (или аналогичным образом в Haml) шаблона сделать STH так:
<div id="collapsable" data-show="<%= model.hide.todo%>"> </div>
теперь JQuery вы можете получить доступ к данным в следующим образом:
hide_todo = $("#collapsable").data("show");
C) Другой способ - сделать вызов ajax, который будет возвращать данные из приложения rails.
В вашем случае я рекомендую второй метод.
Вместо того, чтобы скрывать его с помощью jQuery, я бы добавил класс к этому элементу с отображением: none' при рендеринге, чтобы предотвратить мерцание содержимого. если вы хотите сохранить состояние div, вам нужно использовать ajax для этого. – phoet