Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.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
Ruby on rails RoR 3:在before_筛选器和控制器操作中表现不相同的代码_Ruby On Rails_Ruby_Operator Keyword - Fatal编程技术网

Ruby on rails RoR 3:在before_筛选器和控制器操作中表现不相同的代码

Ruby on rails RoR 3:在before_筛选器和控制器操作中表现不相同的代码,ruby-on-rails,ruby,operator-keyword,Ruby On Rails,Ruby,Operator Keyword,我肯定是遗漏了ruby中的运算符&&的某些地方,我怀疑这是导致这种行为的原因 此代码: 匿名用户登录(&U)? 无论是在应用程序控制器的before_过滤器中还是在主控制器的动作中,都不会生成输出 我不明白为什么 详情: 我在应用程序控制器中添加了这段代码,它将作为before\u过滤器运行 打印结果为: REPONSE : true session: false anonym false is there a curr user: true /// BOTH: true 如果主控制器的操

我肯定是遗漏了ruby中的运算符&&的某些地方,我怀疑这是导致这种行为的原因

此代码: 匿名用户登录(&U)? 无论是在应用程序控制器的before_过滤器中还是在主控制器的动作中,都不会生成输出

我不明白为什么

详情:

我在应用程序控制器中添加了这段代码,它将作为before\u过滤器运行

打印结果为:

REPONSE : true  session: false  anonym false is there a curr user: true /// BOTH: true
如果主控制器的操作中存在相同的代码 打印结果为:

REPONSE : false  session: false  anonym false is there a curr user: true /// BOTH: false
请帮我理解

编辑以下Klochne的请求:

在app_控制器中:

Anon-class: String REPONSE : true  session: false  anonym false is there a curr user: true /// BOTH: true
在家庭控制器中

Anon-class: FalseClass REPONSE : false  session: false  anonym false is there a curr user: true /// BOTH: false

因此,出于某种原因,可以将其解释为字符串。

尝试将before筛选器中的变量设置为实例变量,而不是局部变量。这样,它们将保持并保持在控制器操作中的设置,而不是实例变量。因此,将使用before_filter调用的方法更改为:

@anonymous = cookies['anonymous']
@fresh_session = cookies['session_id'].nil?
@rep = (fresh_session || (anonymous && user_signed_in?))
puts "REPONSE : #{@rep}  session: #{@fresh_session}  anonym #{@anonymous} is there a curr user: #{user_signed_in?} /// BOTH: #{(@anonymous && user_signed_in?)}"
然后,在控制器中,您可以再次放置此行:

puts "REPONSE : #{@rep}  session: #{@fresh_session}  anonym #{@anonymous} is there a curr user: #{user_signed_in?} /// BOTH: #{(@anonymous && user_signed_in?)}"

它应该打印出相同的结果

添加此代码并在两个位置进行尝试:anon class:{anonymous.class.name}在调用代码以在home_控制器中检索/打印它之前,某些东西已将cookies['anonymous']设置为false,而在ApplicationController中调用它时,它已设置为字符串。这与&&运算符无关。我希望它是这样的,但除了我将cookie显式设置为false或true的唯一位置之外,没有任何设置cookie。
puts "REPONSE : #{@rep}  session: #{@fresh_session}  anonym #{@anonymous} is there a curr user: #{user_signed_in?} /// BOTH: #{(@anonymous && user_signed_in?)}"