Ruby on rails 为什么我的@results测验对象为零?
我将以下内容传递到Ruby on rails 为什么我的@results测验对象为零?,ruby-on-rails,ruby,Ruby On Rails,Ruby,我将以下内容传递到results/index.html.erb视图: def create @results = Quiz.where(user_id: current_user.id) redirect_to results_path end (我已将上述操作更改回创建) 然后,在我的results/index.html.erb视图中: <div class="container"> <!-- Example r
results/index.html.erb
视图:
def create
@results = Quiz.where(user_id: current_user.id)
redirect_to results_path
end
(我已将上述操作更改回创建)
然后,在我的results/index.html.erb
视图中:
<div class="container">
<!-- Example row of columns -->
<div class="row">
<h1>Results page</h1>
<div class="col-md-12">
<p>Eventually a user's results will appear here...</p>
<p><%= @results %></p>
<p><%= @results.inspect %></p>
<p><%= current_user.quiz %></p>
<h4>Quiz Answer</h4>
<p><%= @results.answer1 %></p>
<p><%= @results.answer2 %></p>
<p><%= @results.answer3 %></p>
<p><%= @results.answer4 %></p>
<p><%= @results.answer5 %></p>
<p><%= @results.answer6 %></p>
<p><%= @results.answer7 %></p>
<p><%= @results.answer8 %></p>
</div>
</div>
<footer>
<p><a class="btn btn-default" href="showmetheskills.html" role="button">next</a></p>
</footer>
</div> <!-- /container -->
为什么当我在Rails要求的操作中设置它时,@results
nil
测验
是在测验控制器
中创建的:
def new
@user = current_user
@quiz = Quiz.create(user_id: current_user.id)
end
这将触发quizzes/new.html.erb
,从而使测验部分化
有什么问题吗?
@results
为零,因为您执行了重定向。或者渲染视图
def update
@results = Quiz.where(user_id: current_user.id)
render: 'results#index'
end
或者重定向并在那里获得结果,这将是我的首选选项,但我想问,为什么您不更新任何内容就将它们发送到更新操作
def update
redirect_to results_path
end
def ResultsController
def index
@results = Quiz.where(user_id: current_user.id)
end
end
无论哪种方式,像@results.answer1
这样的东西都不起作用,因为您有一个活动记录关系。你要么需要循环
<% @results.each do |result| %>
<%= result.answer1 %>
<% end %>
或者抓住第一个结果
@results=quick.where(user\u id:current\u user.id)。首先
在您的例子中,@results
是一个数组,您在同样不存在的数组上调用一些answer1、answer2、answer3…
方法(我想还没有定义)
下一步:
在更新操作中初始化@results
,但希望它在resuzlts/index.html.erb
中工作
要在索引html中显示@结果
,您需要在索引
操作中加载此变量
更新
如果你想让你的索引动作显示一些东西,请写这行:
@results = Quiz.where(user_id: current_user.id)
采取指数行动
def index
# here
end
然后从index.html.erb
中删除answer1、answer2、answer3….
,它们真的毫无意义。
另外,index.html.erb
应该如下所示:
<div class="col-md-12">
<p><%= current_user.quiz %></p>
<h4>Quiz Answer</h4>
<% @results.each do |result| %>
<p><%= result.answer %></p>
<% end %>
</div>
测验答案
只有在为结果定义了answer
时,这才有效。很难说你的应用程序中是什么。我可以问你如何知道@结果是数组吗?因为你在一个类上调用了.where
,该类将返回符合你条件的对象数组(user\u id=current\u user.id)。从这个人开始
<div class="col-md-12">
<p><%= current_user.quiz %></p>
<h4>Quiz Answer</h4>
<% @results.each do |result| %>
<p><%= result.answer %></p>
<% end %>
</div>