Javascript“if语句”和嵌入式ruby(ruby变量始终为true)
我的html.erb中有这样的脚本: 我正在从Chrome浏览器运行此脚本,条件返回false 但是session[:is_chrome]总是变为false,Rails记录器返回我制作的is_chrome false,wtf?。 但是JS控制台记录器不在控制台中打印yo。 为什么会这样?只有当JS if语句为真时,定义会话值的正确方法是什么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
谢谢大家。您需要在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 %>"