[英]How work render action in controller?
我在控制器中有這樣的方法:
def create
@player = Player.new(player_params)
if @player.save
flash[:success] = "Player created"
redirect_to player_path(@player)
else
render 'new'
end
end
而且我還測試了:
it "add players without nickname" do
visit new_player_path
click_button "Add player"
current_path should eq new_player_path
end
但是在調用render
方法之后,我當前的路徑是:
不
但是布局是來自players/new
。 為什么? 那我應該考什么? 在測試中,我只想檢查用戶是否在nickname
提交應用程序中不輸入昵稱,以返回創建用戶頁面(玩家/新路徑)。
實際上,當出現任何錯誤時,它會從new
轉到create
動作,因此路徑變為http:// localhost:3000 / players ,並且render
僅在此處渲染新動作的模板。 現在的主要問題是為什么呢?
與在新操作中一樣,您已將帶有一些數據的表單提交到了create
操作。 現在,如果假設它使您返回到new
操作,那么它將不得不redirect
您redirect
回該頁面,那么redirect
做什么? 這將使Rails失去所有您提交的表單數據,並且數據將永遠不會持久。 因此,相反,要做的是保留在具有URL: http:// localhost:3000 / players的create
動作上,並呈現new
動作,這意味着new
動作的模板(或者可以說是表單)。 它不會重定向,而只是將其呈現在同一文件中。
現在的問題是數據如何持久保存? 數據與對象一起保留。 這行@player = Player.new(player_params)
使用您在表單中傳遞的屬性創建Player
類的新對象。 現在,當您保持相同的操作並且對象被保留時,表單上的數據也將被保留。
如果要測試它,則在代碼中替換為:
render 'new'
有:
redirect_to new_player_path
並且您會注意到,除非您明確地傳遞了數據,否則數據將永遠不會持久。
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.