目次 閉じる
render :newについて
↑ の記事内の「render :new」の役割について自分なりの解釈をしていく
def create
@article = Article.new(article_params)
if @article.save
redirect_to article_path(@article)
else
render :new
end
endこのときのrender :newとは、
「”もし”投稿内容が保存”できなかったら”、new.html.erb(投稿画面)を表示する」という意味
articles#new(‘/articles/new’) のことではない
↓ new.html.erbで、@articleを指定している
これにより、formには見えない@articleが生まれている
<%= form_with(model: @article, url: articles_path, method: 'post', local: true) do |f| %>↓ articles#newをすると、空の@articleが生まれる
最初にnew.html.erbの@articleに入るのは、ここで定義された空の@articleである
@article = Article.new↓ articles#createをすると、@articleの中に情報が入る
@article = Article.new(article_params)結論、render :new後に表示されるnew.html.erbには@article = Article.new(article_params)が入っている
articles#createでrender :newするarticles#createの@articleが、new.html.erbの@articleに入る- new.html.erbのformには@articleが表示される
←内容(:content)のみ入力する
タイトル(:title)がブランクなのでエラーがでる→


内容に入力した文字は消えずに残っている!
@article = Article.new(article_params) の@articleがrender :newされるので、空ではない、情報を持った@articleが表示される
データベースに保存はされていないが、一時的に情報を持った状態になる
if @article.saveを実行してもエラーで保存できなかったとき、render :newするのが一般的である
- 記事を新規投稿するため、投稿form のページ(’/articles/new’)に遷移する
articles#newの@article = Article.newが実行され、空の@articleが生まれる- 投稿内容を入力
- 保存
articles#createの@article = Article.new(article_params)を実行 - エラーが出て、データベースに保存できなかった
articles#create、else以降のrender :newが実行される- 指定された
:newのview「new.html.erb」(’/articles’)が表示される - 投稿form のページ(’/articles’)には
@article = Article.new(article_params)が表示されている articles#newは実行されていないので、@articleは空じゃない- このときurlは(’/articles’)だが、末尾に(’/new’)を足すと
@article = Article.newが実行されるので、投稿form のページには空の@articleが入る
#DAY12
