Ruby on Railsの基礎
Active Record
Active Recordは、RailsにおけるORM(Object-Relational Mapping)で、データベースのレコードをRubyのオブジェクトとして操作できる仕組みを提供しています。
deleteとdestroyメソッドの違い
Active Recordが提供する機能です。
deleteメソッド
単にデータベースから対象のレコードを削除します。
before_destroy
やafter_destroy
といったコールバックは呼ばれません。
dependent: :destroyなどで関連するレコードの削除を指定していても、その設定は無視されます。
user = User.find(1)
user.delete
destroyメソッド
レコードを削除し、関連するコールバックや関連オブジェクトも処理します。
before_destroyやafter_destroyといったコールバックが実行されます。
user = User.find(1)
user.destroy
違いのまとめ
メソッド | コールバック | 関連レコードの削除 | 処理速度 |
delete | 呼ばれない | 無視される | 速い |
destroy | 呼ばれる | 考慮される | 遅い |
これらのメソッドを使い分けることで、柔軟にデータ削除を制御できるようになっています。
ユーザーがemailとnameを入力するので、paramsを使ってユーザーを作成
基本的な機能を学びます。
class UsersController < ApplicationController
def create
@user = User.new(user_params)
if @user.save
redirect_to root_path # 保存成功時にトップページにリダイレクト
else
render action: :new # 保存失敗時に再度新規ユーザー作成ページを表示
end
end
private
# セキュリティのためにstrong parametersを使用
def user_params
params.require(:user).permit(:email, :name)
end
end
<!-- new.html.erb -->
<%= form_with model: @user, local: true do |form| %>
<%= form.label :name %>
<%= form.text_field :name %>
<%= form.label :email %>
<%= form.text_field :email %>
<%= form.submit "Create User" %>
<% end %>
@user = User.new(user_params)で、フォームから受け取ったパラメータを使ってUserモデルのインスタンスを生成します。
if @user.saveで、ユーザー情報をデータベースに保存し、成功した場合にはredirect_to root_pathでトップページにリダイレクトします。失敗した場合は、新しいユーザーの作成ページに戻ります。
user_paramsメソッドでは、Strong Parametersを利用し、セキュリティ対策を行っています。
ここでは、:emailと:nameの2つのフィールドだけが許可されるように指定しています。
フォームの作成方法として、form_withヘルパーが使用されています。
form_with model: @user, local: true do |form|とすることで、@userインスタンスに基づいたフォームが生成されます。
form.label :nameやform.text_field :emailといったコードで、nameやemail入力用のフィールドを作成しています。submitボタンもform.submit "Create User"で生成され、クリックするとcreateアクションにデータが送信されます。
ユーザーの保存が失敗した場合、render action: :newでnewアクションが再表示され、エラー内容をユーザーに伝えることができます。