【rails】render :newについて

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

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’) のことではない


複数の@article

↓ 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したら、@articleはどうなる?

結論、render :new後に表示されるnew.html.erbには@article = Article.new(article_params)が入てい

  1. articles#createrender :newする
  2. articles#create@articleが、new.html.erbの@articleに入る
  3. new.html.erbのformには@articleが表示される

←内容(:content)のみ入力する

タイトル(:title)がブランクなのでエラーがでる→

内容に入力した文字は消えずに残っている!

@article = Article.new(article_params) の@articlerender :newされるので、空ではない、情報を持った@articleが表示される

データベースに保存はされていないが、一時的に情報を持った状態になる

if @article.saveを実行してもエラーで保存できなかったとき、render :newするのが一般的である


@articleの動き

  1. 記事を新規投稿するため、投稿form のページ(’/articles/new’)に遷移する
  2. articles#new@article = Article.newが実行され、空の@articleが生まれる
  3. 投稿内容を入力
  4. 保存 articles#create@article = Article.new(article_params)を実行
  5. エラーが出て、データベースに保存できなかった
  6. articles#createelse以降のrender :newが実行される
  7. 指定された:newのview「new.html.erb」(’/articles’)が表示される
  8. 投稿form のページ(’/articles’)には@article = Article.new(article_params)が表示されている
  9. articles#newは実行されていないので、@articleは空じゃない
  10. このときurlは(’/articles’)だが、末尾に(’/new’)を足すと@article = Article.newが実行されるので、投稿form のページには空の@articleが入る

#DAY12