我将以下内容传递给results/index.html.erb
视图:
def create
@results = Quiz.where(user_id: current_user.id)
redirect_to results_path
end
(我已将上述操作改为BACK以创建)。
然后,在我的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 -->
(我知道在模型上设置编号属性不是'最佳实践';忽略该部分。)
我收到错误:
undefined method 'answer1' for nil:NilClass
为什么@results
为零,当我在行动中设置它时Rails要求?
在Quiz
:
QuizzesController
def new
@user = current_user
@quiz = Quiz.create(user_id: current_user.id)
end
哪个触发器quizzes/new.html.erb
会使测验部分呈现。
有什么问题?
答案 0 :(得分:0)
@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 = Quiz.where(user_id: current_user.id).first
答案 1 :(得分:0)
在你的情况下,@results
是一个数组,你在数组上调用了一些answer1, answer2, answer3...
方法(我还没有定义)。
下一步:
您在更新操作中初始化@results
,但希望它在resuzlts/index.html.erb
中有效。
要在索引html中显示@results
,您需要在index
操作中加载此变量。
<强>更新强>
如果您希望index
操作显示某些内容,请输入以下行:
@results = Quiz.where(user_id: current_user.id)
进入索引行动
def index
# here
end
并从answer1, answer2, answer3....
移除index.html.erb
,它们真的毫无意义。
此外,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
时才会有效。很难说你的应用程序是什么。