簡體   English   中英

工作如何在控制器中呈現動作?

[英]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方法之后,我當前的路徑是:

HTTP://本地主機:3000 /播放器

HTTP://本地主機:3000 /播放/新

但是布局是來自players/new 為什么? 那我應該考什么? 在測試中,我只想檢查用戶是否在nickname提交應用程序中不輸入昵稱,以返回創建用戶頁面(玩家/新路徑)。

實際上,當出現任何錯誤時,它會從new轉到create動作,因此路徑變為http:// localhost:3000 / players ,並且render僅在此處渲染新動作的模板。 現在的主要問題是為什么呢?

與在新操作中一樣,您已將帶有一些數據的表單提交到了create操作。 現在,如果假設它使您返回到new操作,那么它將不得不redirectredirect回該頁面,那么redirect做什么? 這將使Rails失去所有您提交的表單數據,並且數據將永遠不會持久。 因此,相反,要做的是保留在具有URL: http:// localhost:3000 / playerscreate動作上,並呈現new動作,這意味着new動作的模板(或者可以說是表單)。 它不會重定向,而只是將其呈現在同一文件中。

現在的問題是數據如何持久保存? 數據與對象一起保留。 這行@player = Player.new(player_params)使用您在表單中傳遞的屬性創建Player類的新對象。 現在,當您保持相同的操作並且對象被保留時,表單上的數據也將被保留。

如果要測試它,則在代碼中替換為:

render 'new'

有:

redirect_to new_player_path

並且您會注意到,除非您明確地傳遞了數據,否則數據將永遠不會持久。

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM