当我直接查看我的index
视图时,它的行为符合预期。
但是,当我尝试在创建记录后立即呈现index
视图时,我的变量变为nil
,我看到此消息:
任何有关为什么会发生这种情况的见解都会b
这是我的'TodoController`:
class TodosController < ApplicationController
def index
@todo = Todo.new
@todos = Todo.where(done:false,user:current_user.email)
@todones = Todo.where(done:true,user:current_user.email)
end
def create
@todo = Todo.new(todo_params)
respond_to do |format|
if @todo.save
format.js
format.html {render "index"} #WHERE I RENDER INDEX PROMPTING THE ERROR!
else
render "new"
end
end
end
end
在index.html.erb
视图中,我有这个:
<h3> TO DO </h3>
<ul class="todos">
<% @todos.each do |t| %>
<%= render partial: "todo", object:t %>
<% end %>
</ul>
部分_todo.html.erb
:
<li>
<strong><%= todo.name %></strong>
<small><%= link_to "Mark as done", todo_path(todo.id), :method => :put %></small>
</li>
现在当我尝试插入
时答案 0 :(得分:2)
@todos
是nil
,因为它是在视图中创建的,而不是在控制器的create
操作中填充。
快速解决方法是在视图中添加条件:
<% unless @todos.nil? %>
<ul class="todos">
<% @todos.each do |t| %>
<%= render partial: "todo", object:t %>
<% end %>
</ul>
<% end %>
或者,您可以在@todos
中填充create
,但我怀疑这是意图。
如果您想在create
操作后将用户发送到索引页面,我建议您使用redirect_to index_url
通过新的HTTP请求执行此操作,而不是使用create
呈现索引视图{{1}}行动。{{1}}
这应该避免需要&#39;&lt;%除非@ todos.nil? %&gt;在您的视图中的`语句。