下面的代碼會導(dǎo)致這個錯誤:
def show
@book = Book.find(params[:id])
if @book.special?
render action: "special_show"
end
render action: "regular_show"
end
錯誤消息:Can only render or redirect once per action(一個動作只能渲染或重定向一次)
注意:Rails 開始渲染,把 @book 變量導(dǎo)入 special_show 視圖中。
如果 @book.special? 的求值結(jié)果是 true杆故,Rails 開始渲染歌粥,把 @book 變量導(dǎo)入 special_show 視圖中诈豌。但是婆翔,show 動作并不會就此停止運(yùn)行姥宝,當(dāng) Rails 運(yùn)行到動作的末尾時爸业,會渲染 regular_show 視圖其骄,從而導(dǎo)致這個錯誤。解決的辦法很簡單扯旷,確保在一次代碼運(yùn)行路徑中只調(diào)用一次 render 或 redirect_to 方法拯爽。有一個語句可以幫助解決這個問題,那就是 and return钧忽。
下面的代碼對上述代碼做了修改:
def show
@book = Book.find(params[:id])
if @book.special?
render action: "special_show" and return
end
render action: "regular_show"
end