我想在保存模型后重定向到模型索引视图。
def create
@test = Test.new(params[:test])
respond_to do |format|
if @test.save
format.html { redirect_to @test, notice: 'test was successfully created.' }
else
format.html { render action: "new" }
end
end
end
我试过
format.html { render action: "index", notice: 'Test was successfully created.' }
但是我在/app/views/tests/index.html.erb -
中收到以下错误 undefined method `each' for nil:NilClass
知道出了什么问题吗?
答案 0 :(得分:69)
render action: "index"
不会重定向,重定向和渲染不同的渲染,只会使用当前可用的变量渲染视图。使用重定向时,控制器的索引函数将运行,然后视图将从那里生成。
您收到错误是因为您的索引视图需要一些您没有给它的数组,因为您只是呈现“索引”并且您没有视图所需的变量。
你可以用两种方式做到这一点
1-使用render action: "index"
在呈现之前使视图可以使用它所需的所有变量,例如,它可能需要一个@posts变量,它用于显示帖子列表,因此您需要在渲染之前获取创建操作中的帖子
@posts = Post.find(:all)
2-不要渲染redirect_to
而不是渲染“index”,而是重定向到索引操作,该操作将负责执行索引视图所需的必要事项
redirect_to action: "index"
答案 1 :(得分:7)
视图“index”包括“@ tests.each do”-loop。而方法create不提供变量“@tests”。所以你有错误。 你可以试试这个:
format.html { redirect_to action: "index", notice: 'Test was successfully created.' }
答案 2 :(得分:3)
非常简单。
只需重写您的方法
def create
@test = Test.new(params[:test])
respond_to do |format|
if @test.save
format.html { **redirect_to tests_path**, notice: 'test was successfully created.' }
else
format.html { render action: "new" }
end
end
end
它将重定向到索引页
答案 3 :(得分:3)
有两种方法可以做到这一点:
rake routes
: format.html { redirect_to todo_items_url, notice: 'Todo item was successfully created.' }
format.html { redirect_to action: :index, notice: 'Todo item was successfully created.' }