現在、アプリのすべてのページで実行したいツールチップ JavaScript がありますが、データベースで現在のユーザーのモデルの User.advanced_tooltips が true に設定されている場合に限ります。
この JavaScript をデータベースの値に基づいて条件付きでトリガーするための概念的な最良の方法は何ですか? JavaScript と Rails の通信に問題があります。
現在、アプリのすべてのページで実行したいツールチップ JavaScript がありますが、データベースで現在のユーザーのモデルの User.advanced_tooltips が true に設定されている場合に限ります。
この JavaScript をデータベースの値に基づいて条件付きでトリガーするための概念的な最良の方法は何ですか? JavaScript と Rails の通信に問題があります。
クリーンでシンプルな解決策は、javascript 関数を Rails ロジックでラップすることです。
<script type='text/javascript'>
var setupTooltips = function() {
// do something here
}
$(document).ready(function() {
<% if current_user.advanced_tooltips %>
setupTooltips();
<% end %>
});
</script>
jquery を使用していると仮定すると、次のようなことができます。
<script type='text/javascript'>
$(document).ready(function() {
var advtt = '<%= @user.advanced_tooltips ? "yes" : "no" %>';
if ( advtt == 'yes')
# ?? add css, or whatever
});
</script>
これは、上記の Javascript を含むビューをレンダリングする前に、コントローラーに @user が設定されていることを前提としています。
これが私が最終的に使用したソリューションです(このプロジェクトによって課せられた非常に奇妙な制約を考慮して):
最初に、現在の User を検索し、その advanced_tooltip 値をテキストとしてレンダリングするコントローラー ルートを設定します。
次に、application.js で $.get を使用してそのルートに AJAX 呼び出しを行い、結果が == "true" かどうかをチェックして、ユーザーが高度なツールチップを有効にしているかどうかを判断しました。
これは厄介な解決策です (実際には上に挙げた方が優れています) が、他の誰かのプロジェクトの完成途中に飛び乗ったために非常に厳格な制限があったため、それは私がしなければならなかったことです。
それらは有効であり、通常の状況下では完全に機能するため、両方のコメントに賛成票を投じました。