Переменная экземпляра против символа в рубине на рельсах (form_for)

Я новичок в ruby ​​on rails и работаю с версией 2.3 на mac osx. Я пытаюсь создать ту же функциональность, которую создает эшафот, но сам по себе. Я создал "пост" контроллер, представление и модель. в пост-контроллере у меня есть следующее:

class PostController < ApplicationController
  def index
  end

  def new
    @post = Post.new
  end
end

в new.html.erb, у меня есть следующее:

<h1>New Post</h1>

<% form_for :post do |f| %>

    <%= f.text_field :title %>

<% end %>

Я заметил, что в коде, создаваемом эшафотом, используется переменная экземпляра @post для form_for helper. почему они используют переменную экземпляра в форме сгенерированного леса, если передают символ: post в form_for делает то же самое, в то время как для символа требуется изменить конфигурацию маршрутов?

Большое вам спасибо, Юваль

Ответ 1

если вы используете символ: post его создает

<form action="/posts" method="post">

если вы используете экземпляр @post

для @post = Post.new вы получите

<form action="/posts/create" class="new_account" id="new_account" method="post">

для @post = Post.find(1) вы получите

<form action="/posts/update" class="edit_account" id="edit_account_1" method="post">
<input name="_method" type="hidden" value="put">

если у вас разные формы для вашего нового, и ваше редактирование не имеет большого значения, но более похоже, чем ваши новые, и ваши формы редактирования будут идентичны или близки к нему.

поэтому, если вы используете переменную экземпляра @post, вы можете поместить весь код формы в _form и просто вызвать партию, и она будет обрабатывать остальные на основе того, будет ли вы передавать новую запись или существующую запись

Ответ 2

Одна из возможных причин заключается в том, что он создает код формы для создания нового сообщения, более похожего на код формы для обновления существующего сообщения.