Ruby on rails 如何在控制器中渲染动作?

Ruby on rails 如何在控制器中渲染动作?,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,我在控制器中有如下方法: 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"

我在控制器中有如下方法:

  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
方法之后,我的当前路径是:

不是

但是布局来自
玩家/new
。为什么?
我的测试应该是什么?在测试中,我只想检查用户是否没有在
nickname
字段应用程序返回创建用户页面(玩家/新路径)中键入昵称。

实际上,当出现任何错误时,它会从
new
移动到
create
操作,因此路径变为,而
渲染
只是在这里渲染新动作的模板。现在主要的问题是为什么会这样

与在新操作中一样,您已将带有一些数据的表单提交到
create
操作。现在假设它将您发送回
new
操作,那么它将不得不
重定向
您返回到该页面,那么
重定向
将做什么?它将使rails丢失您提交的所有表单数据,并且这些数据将永远不会持久。因此,所做的是保留在
create
操作上,该操作具有url:并呈现
new
操作,这意味着
new
操作的模板(或者您可以说表单)。它不重定向,只是在同一个渲染中渲染

现在的问题是数据是如何持久的?数据与对象保持一致。此行
@player=player.new(player_params)
使用表单中传递的属性创建
player
类的新对象。现在,当您保持相同的操作并且对象被持久化时,表单上的数据也被持久化

如果要测试它,请在代码中替换以下内容:

render 'new'
与:

您会注意到,除非您显式地传递数据,否则数据永远不会持久


希望这能有所帮助。

实际上,当出现任何错误时,它会从
新建
移动到
创建
操作,因此路径变为,而
渲染
仅在此处渲染新操作的模板。现在主要的问题是为什么会这样

与在新操作中一样,您已将带有一些数据的表单提交到
create
操作。现在假设它将您发送回
new
操作,那么它将不得不
重定向
您返回到该页面,那么
重定向
将做什么?它将使rails丢失您提交的所有表单数据,并且这些数据将永远不会持久。因此,所做的是保留在
create
操作上,该操作具有url:并呈现
new
操作,这意味着
new
操作的模板(或者您可以说表单)。它不重定向,只是在同一个渲染中渲染

现在的问题是数据是如何持久的?数据与对象保持一致。此行
@player=player.new(player_params)
使用表单中传递的属性创建
player
类的新对象。现在,当您保持相同的操作并且对象被持久化时,表单上的数据也被持久化

如果要测试它,请在代码中替换以下内容:

render 'new'
与:

您会注意到,除非您显式地传递数据,否则数据永远不会持久

希望这有帮助