Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Rails:基于数据库中的值运行脚本_Javascript_Ruby On Rails - Fatal编程技术网

Javascript Rails:基于数据库中的值运行脚本

Javascript Rails:基于数据库中的值运行脚本,javascript,ruby-on-rails,Javascript,Ruby On Rails,现在,我有一些工具提示JavaScript,我想在我的应用程序的每个页面上运行,但前提是当前用户的模型在我的数据库中将user.advanced_工具提示设置为true 从概念上讲,根据数据库中的值有条件地触发此JavaScript的最佳方法是什么?我在让JavaScript和Rails通信方面遇到了一些实际问题。假设您使用的是jquery,您可以这样做: <script type='text/javascript'> $(document).ready(function() {

现在,我有一些工具提示JavaScript,我想在我的应用程序的每个页面上运行,但前提是当前用户的模型在我的数据库中将user.advanced_工具提示设置为true


从概念上讲,根据数据库中的值有条件地触发此JavaScript的最佳方法是什么?我在让JavaScript和Rails通信方面遇到了一些实际问题。

假设您使用的是jquery,您可以这样做:

<script type='text/javascript'>
$(document).ready(function() {
   var advtt = '<%= @user.advanced_tooltips ? "yes" : "no" %>';
   if ( advtt == 'yes')
     # ?? add css, or whatever
});
</script>

$(文档).ready(函数(){
var advtt='';
如果(advtt==“是”)
#?添加css或其他内容
});

这假设在呈现包含上述Javascript的视图之前在控制器中设置了@user。

一个干净简单的解决方案是在rails逻辑中包装Javascript函数:

<script type='text/javascript'>

  var setupTooltips = function() {
    // do something here
  }

  $(document).ready(function() {

    <% if current_user.advanced_tooltips %>
      setupTooltips();
    <% end %>

  });

</script>

var setupTooltips=函数(){
//在这里做点什么
}
$(文档).ready(函数(){
设置工具提示();
});

以下是我最终使用的解决方案(考虑到该项目施加的非常奇怪的约束):

首先,我设置了一个查找当前用户的控制器路由,然后将其高级工具提示值呈现为文本

然后,在我的application.js中,我使用$.get调用了一个AJAX,然后检查结果是否=“true”,以确定用户是否启用了高级工具提示

这是一个混乱的解决方案(上面列出的那些实际上更好),但由于我在中途跳到别人的项目上,所以我有一些非常严格的限制,这就是我必须做的


仍然给出了两个评论投票,因为它们是有效的,在正常情况下完全可以工作。

您可以使用jQuery和Ajax。从这里检查答案。不幸的是,这就是我最初尝试的解决方案。我尝试将代码嵌入我的布局(在弹出式modals sans layout中呈现某些视图之前一直有效)和js.erb文件(显然无法访问会话变量,这是我存储用户的方式)中,这是我通常跟踪用户的方式,在每个控制器操作之前设置@user的before_过滤器中。然而,这个项目使用session变量来存储当前用户的id,而且——因为我在项目完成中期加入了这个团队——主要重构并不是一个真正的选项。我不认为这需要主要重构。您只需将@user.advanced_工具提示替换为user.find(会话[:user_id]).advanced_工具提示或其他任何提示即可。