Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.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“if语句”和嵌入式ruby(ruby变量始终为true)_Javascript_Ruby On Rails_Ruby_Conditional Statements - Fatal编程技术网

Javascript“if语句”和嵌入式ruby(ruby变量始终为true)

Javascript“if语句”和嵌入式ruby(ruby变量始终为true),javascript,ruby-on-rails,ruby,conditional-statements,Javascript,Ruby On Rails,Ruby,Conditional Statements,我的html.erb中有这样的脚本: 我正在从Chrome浏览器运行此脚本,条件返回false 但是session[:is_chrome]总是变为false,Rails记录器返回我制作的is_chrome false,wtf?。 但是JS控制台记录器不在控制台中打印yo。 为什么会这样?只有当JS if语句为真时,定义会话值的正确方法是什么 谢谢大家。您需要在Ruby输出周围加引号: "<%= params[:section_id].to_s %>" 您需要了解rails在将erb

我的html.erb中有这样的脚本:

我正在从Chrome浏览器运行此脚本,条件返回false

但是session[:is_chrome]总是变为false,Rails记录器返回我制作的is_chrome false,wtf?。 但是JS控制台记录器不在控制台中打印yo。 为什么会这样?只有当JS if语句为真时,定义会话值的正确方法是什么


谢谢大家。

您需要在Ruby输出周围加引号:

"<%= params[:section_id].to_s %>"

您需要了解rails在将erb发送到浏览器之前呈现erb,并且在javascript运行其代码时没有erb语句。此外,当rails呈现文件时,它将所有未被包围的内容视为纯文本,因此

<%= session[:is_chrome] = false %>
<%= Rails.logger.debug = "I made is_chrome false, wtf?" %>
始终执行,而不管围绕它们编写什么类型的javascript代码

如果要在客户端执行某些服务器端代码,唯一的方法是通过Ajax、easy option发送另一个请求,或者使用socketIO启用客户端-服务器通信—我从来没有这样做过:


然而,您试图实现的是完全可以在服务器端实现的:在呈现模板时,查看服务器上的,每个ruby片段都会得到评估。 因此,这些行每次都会在服务器上执行,而不仅仅是在不是chrome浏览器的情况下:

<%= session[:is_chrome] = false %>
<%= Rails.logger.debug = "I made is_chrome false, wtf?" %>
要解决此问题,您可以执行以下操作之一:

检查服务器是否为chrome浏览器,并进行必要的更改 变化 检查客户端是否是chrome浏览器,并制作ajax 调用服务器以通知存在chrome或非chrome 浏览器 此外,用户输入的引号中还指出:

"<%= params[:section_id].to_s %>"

你是想根据客户端的值来评估服务器上的某个东西吗?@Mathletics是的,我是。是的,你不能这样做,你知道吗?因为在浏览器中运行JS时,Ruby已经由服务器上的进行了评估。
"<%= params[:section_id].to_s %>"