システム開発

Web System

hero

Ruby on Railsの基礎

 

Active Record

Active Recordは、RailsにおけるORM(Object-Relational Mapping)で、データベースのレコードをRubyのオブジェクトとして操作できる仕組みを提供しています。

 

 

deleteとdestroyメソッドの違い

Active Recordが提供する機能です。

 

deleteメソッド

単にデータベースから対象のレコードを削除します。

before_destroyafter_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アクションが再表示され、エラー内容をユーザーに伝えることができます。