form_for在提交时如何知道差异:new:edit

Mat*_*ood 27 forms model-view-controller ruby-on-rails

我已经生成了一个脚手架,我们称之为脚手架测试.在那个脚手架中,我有一个_form.html.erb,它正在为动作渲染:new =>:create and:edit =>:update

Rails有时会做很多魔术,我无法弄清楚form_for如何知道如何调用正确的:在按下提交时动作:new和:edit

脚手架形式

<%= form_for(@test) do |f| %>


  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>
Run Code Online (Sandbox Code Playgroud)

与非脚手架形式

 <% form_for @test :url => {:action => "new"}, :method => "post" do |f| %>
       <%= f.submit %>
 <% end %>
Run Code Online (Sandbox Code Playgroud)

编辑模板

<h1>Editing test</h1>

<%= render 'form' %>
Run Code Online (Sandbox Code Playgroud)

新模板

<h1>New test</h1>

<%= render 'form' %>
Run Code Online (Sandbox Code Playgroud)

正如您所看到的那样,表单之间没有区别两个模板如何呈现相同的表单但使用不同的操作?

Log*_*man 55

它检查@test.persisted?如果它是持久的,那么它是一个编辑表单.如果不是,那就是一种新形式.


shw*_*eta 6

它会检查记录是否为新记录.

@test.new_record? # if true then create action else update action
Run Code Online (Sandbox Code Playgroud)