※本サイトで紹介している商品・サービス等の外部リンクには、アフィリエイト広告が含まれる場合があります。
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