railsのcontrollerのnewアクションについて

rails

本記事では、controllerのnewアクションの役割について、理解が怪しいところがあったのでまとめ記事を作成します!

railsの基本操作で、index、new、create、update、deleteとさまざまなアクションがありますが、今回、railsのapiモードを使用して一からアプリを作成していたところで、「あれ、newアクションって何をやってるんだ?」と疑問になったため改めて調査してみました!

newアクションって何をやっているんだっけ…?

疑問に思ったのは、controllerを使用して、データベースにデータを登録していたとき。過去のアプリを参考にしていたら下記のように記載していた。

class UsersController < ApplicationController
  def new
    @user = User.new
  end

  def create
    @user = User.new(user_params)
    @user.save
    ....
  end

  private
  def user_params
    params.require(:user).permit(:name, :description)
  end
end

…createアクションでは受け取ったparamsからインスタンスを作成してsaveすることでデータベースに保存している。これはわかる。あれ、それじゃnewって何をやっているんだっけ、、、んー、ちょっと分からなくなってしまったので調査してみます!

newアクションについて調査してみる

そもそもnewアクションってpost?get?そこからみてみることにした。

rails routesで確認してみると、newはget、createはpostだった。ということはnewはクライアント(view)側での役割がある?

そこから調べてみると、下記の記事が参考になりました。

ruby on railsでアプリを作成する場合、newアクションを使用して、viewsディレクトリの中にnew.html.erbファイルを作成します。このファイルでdbに保存する中身を設定していくわけですね。

Railsガイドの記事を引用すると、

<h1>New Article</h1>

<%= form_with model: @article do |form| %>
  <div>
    <%= form.label :title %><br>
    <%= form.text_field :title %>
  </div>

  <div>
    <%= form.label :body %><br>
    <%= form.text_area :body %>
  </div>

  <div>
    <%= form.submit %>
  </div>
<% end %>

ここでは、articles_controller.rbのnewアクションで作成されたインスタンス(下記)を上記に渡して、そこにプロパティを付与しているわけですね。

def new
  @article = Article.new # インスタンスを作成してnew.html.erbに渡す。
end

そして情報を入力したのちにform.submitを実行すると、今度はcreateアクションに渡されてデータが保存されるという流れになります。

rails APIモードにcreateは必要?

今回、フロントエンドはVue.appを使用して、railsはAPIモードで使用します。

paramsはJSON形式で送るので、今回newアクションは必要なのか調べてみました。結論から言うと、railsのapiモードではcreateアクションは不要です。

newアクションはhtmlフォームを生成するためであり(form_withでmodelを生成したら自動的にnewアクションが呼ばれる)、フロントエンドをrubyで作らない限りは必要がなくなってしまうみたいです。

rails APIモードのまとめ

最近、railsはAPIモードでしか使用しておらず、newアクションの必要性を忘れてしまっていました。

ただ、今回調べたことでまた一つ詳しくなれたと思います。今後も疑問に思ったことは調べて、どんどん知識を深めていこうと思います。

コメント

タイトルとURLをコピーしました