do |o| puts o.total end # 長いスコープ → 詳細な名前 class UserAccountManager def initialize @pending_verification_users = [] @email_notification_queue = [] end end
ApplicationRecord def orders # 単純にアソシエーションを返す super end def total_order_items_count # 重い処理であることを名前で表現 orders.joins(:line_items).sum(:quantity) end def update_last_accessed! # 副作用があることを明示 update!(last_accessed_at: Time.current) end end
let(:user) { create(:user) } # アソシエーション describe 'associations' do it { should belong_to(:company).optional } it { should have_many(:orders) } end # バリデーション describe 'validations' do it { should validate_presence_of(:email) } it { should validate_uniqueness_of(:email) } end # メソッド describe '#full_name' do it 'returns the full name' do user = create(:user, first_name: 'John', last_name: 'Doe') expect(user.full_name).to eq('John Doe') end end end
在庫確保 → 決済 → 配送 → 通知 def process_order(order) ActiveRecord::Base.transaction do reserve_inventory(order) process_payment(order) schedule_shipping(order) send_confirmation_email(order) end rescue StandardError => e rollback_order_processing(order, e) raise end end
ApplicationController def create @user = User.new(user_params) if @user.save # メール送信が直接書かれている mail = Mail.new do from '[email protected]' to @user.email subject ' ようこそ!' body "#{@user.name} さん、登録ありがとうございます" end mail.deliver redirect_to @user else render :new end end end
EmailService def self.send_welcome(user) mail = Mail.new do from '[email protected]' to user.email subject ' ようこそ!' body "#{user.name} さん、登録ありがとうございます" end mail.deliver end end
UsersController < ApplicationController def create @user = User.new(user_params) if @user.save EmailService.send_welcome(@user) redirect_to @user else render :new end end end
items.sum(&:price) puts " 合計:¥#{total.to_s(:delimited)}" end # 良い例:処理を分離 def calculate_total(items) items.sum(&:price) end def format_price(amount) "¥#{amount.to_s(:delimited)}" end