Ruby on rails 实例变量未被其视图识别
有人能想出为什么控制器中声明的实例变量不能被其视图识别的原因吗 控制器如下所示:Ruby on rails 实例变量未被其视图识别,ruby-on-rails,view,controller,instance-variables,ignore,Ruby On Rails,View,Controller,Instance Variables,Ignore,有人能想出为什么控制器中声明的实例变量不能被其视图识别的原因吗 控制器如下所示: class UsersController < ApplicationController ... def show @questionshow = session[:profilequestioncapture] @user = User.find(params[:id]) @question = Question.where("id = ?", @questionshow).first ... cl
class UsersController < ApplicationController
...
def show
@questionshow = session[:profilequestioncapture]
@user = User.find(params[:id])
@question = Question.where("id = ?", @questionshow).first
...
class UsersController
和视图:(用户目录中的show.html.erb:)
。。。
大字标题
描述
预算
 
....
-会话正确填充@questionshow实例变量。它只包含id,并正确地传递给@question
-奇怪的是:格式和显示都正确,而带有的任何内容都不正确
-更奇怪的是。如果我在控制器中注释掉@user,记录仍然正确地显示在视图中,因此它实际上忽略了控制器中的内容(但我不知道为什么)
-是的,我已经检查过了,我看到的是正确的控制器和查看器
我被难住了 您确定会话[:profilequestioncapture]不是零吗?
@question
是一个ActiveRecord::Relation
对象。除非您首先调用它的。否则,当您尝试调用它的某些问题属性时,将出现错误。如果正如其中一个答案所述,session[:profilequestioncapture]
为nil,那么这也是正确的。首先,我认为where作用域将为您提供一个ActiveRecord::Relation(它提供一个数组),而不是一个记录。既然你想通过身份证找到,我建议你
Question.find(session[:profilequestioncapture])
最有可能的情况是,您希望拯救ActiveRecord::NotFound异常,并设置默认问题或更改行为
您使用的是Draper还是Presenters?
你能再检查一下你的@question是否有数据吗
至于你的@user,即使被注释掉了:
- 检查缓存问题
- 检查可为您填充的before_筛选器操作
我找到了解决方案,但这让我有点困惑。在同一控制器中的所有操作中,我没有定义附加到问题模型的同一实例变量。所以在Show中是@question,而在Create中是@yyyquestion(例如),在Update中我使用了其他东西(例如@yyyquestion)。我不知道为什么这会导致错误,也不知道为什么实例变量会填充在控制器中而不是视图中。我认为这个故事还有很多…只要记录你的变量,你就会发现你遗漏了一些非常确定的东西。我已经对它进行了调试和三次检查。我忘了添加。首先是我上面的问题。我已经编辑了这个问题。但不是这样,它现在还在工作。会话已填充,我已记录了所有其他变量@视图中的question.xxx仍然为空…您可以检查html源代码吗?你看到那里的
dd
了吗?我做了你建议的更改。没有理由将会话转换为整数,因为它正在查找我需要的记录,只需要将其传递给视图。没有前置过滤器,我没有使用Draper或Presenters。控制器中的@question有数据,但不在视图中。拯救没有例外,因为我没有例外,只有一个空白视图。恐怕没有运气了。你能详细解释一下缓存问题是什么意思吗?如果你的公用文件夹中有一个同名的html文件,或者你已经用缓存设置了dev env和/或将值存储在缓存存储中。你可能拉错了@user,但我非常怀疑。
Question.find(session[:profilequestioncapture])