ERB Şablonları: En İyi Uygulamalar ve İpuçları ERB (Embedded Ruby), Rails için varsayılan şablon motorudur. Temiz ve sürdürülebilir ERB şablonları yazma en iyi uygulamaları:
1. Mantığı View’lardan Uzak Tutun Kötü Örnek 1 2 3 4 5 6 7 8 9 10 11 12 <!-- Bunu yapmayın --> <% if user.admin? && user.active? && user.posts.count > 0 %> <div class="admin-panel"> <% user.posts.each do |post| %> <% if post.published? && post.created_at > 1.week.ago %> <div class="recent-post"> <%= post.title %> </div> <% end %> <% end %> </div> <% end %> İyi Örnek 1 2 3 4 5 6 <!-- Helper'ları ve model method'larını kullanın --> <% if show_admin_panel?(user) %> <div class="admin-panel"> <%= render 'admin/recent_posts', posts: user.recent_published_posts %> </div> <% end %> 1 2 3 4 5 6 7 8 9 # Helper'da def show_admin_panel?(user) user.admin? && user.active? && user.posts.any? end # User model'inde def recent_published_posts posts.published.where('created_at > ?', 1.week.ago) end 2. Yeniden Kullanılabilir Bileşenler için Partial’ları Kullanın Modüler Bileşenler Oluşturun 1 2 3 4 5 6 7 8 9 10 11 <!-- _user_card.html.erb --> <div class="user-card"> <div class="user-avatar"> <%= image_tag user.avatar.present? ? user.avatar : 'default-avatar.png' %> </div> <div class="user-info"> <h3><%= user.name %></h3> <p><%= user.email %></p> <span class="user-role"><%= user.role.humanize %></span> </div> </div> 1 2 3 4 5 6 <!-- Partial'ı kullanın --> <div class="users-grid"> <% @users.each do |user| %> <%= render 'user_card', user: user %> <% end %> </div> 3. HTML Güvenliği ve Kaçırma Doğru HTML Kaçırma 1 2 3 4 5 6 7 8 9 10 11 12 <!-- Varsayılan olarak güvenli --> <p>Kullanıcı yorumu: <%= @comment.content %></p> <!-- Ham HTML gerektiğinde (dikkatli olun!) --> <div class="content"> <%= raw @post.html_content %> </div> <!-- Sanitizasyon ile daha iyi yaklaşım --> <div class="content"> <%= sanitize @post.content, tags: %w[p br strong em ul ol li] %> </div> Dinamik HTML için content_tag Kullanma 1 2 3 4 5 6 7 8 9 10 # Helper'da def status_badge(status) css_class = case status when 'active' then 'badge-success' when 'pending' then 'badge-warning' else 'badge-default' end content_tag :span, status.humanize, class: "badge #{css_class}" end 1 2 <!-- Şablonda --> <%= status_badge(user.status) %> 4. Koşullu Rendering Temiz Koşullu Mantık 1 2 3 4 5 6 7 8 9 10 <!-- İyi --> <%= content_tag :div, class: "user-status #{'active' if user.active?}" do %> <span><%= user.name %></span> <% if user.admin? %> <span class="admin-badge">Admin</span> <% end %> <% end %> <!-- Helper ile daha iyi --> <%= render 'user_status', user: user %> 5. Form En İyi Uygulamaları Anlamsal Form Yapısı 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 <%= form_with model: @user, local: true do |form| %> <div class="form-group"> <%= form.label :name %> <%= form.text_field :name, class: 'form-control' %> <%= form.error_span :name %> </div> <div class="form-group"> <%= form.label :email %> <%= form.email_field :email, class: 'form-control' %> <%= form.error_span :email %> </div> <div class="form-actions"> <%= form.submit 'Kullanıcıyı Kaydet', class: 'btn btn-primary' %> <%= link_to 'İptal', users_path, class: 'btn btn-secondary' %> </div> <% end %> Özel Form Helper’ı 1 2 3 4 5 6 7 8 9 # application_helper.rb'de module ApplicationHelper def form_error_span(form, field) if form.object.errors[field].any? content_tag :span, form.object.errors[field].first, class: 'error-message' end end end Sonuç View’ları basit tutun ve karmaşık mantığı helper’lara ya da model’lere taşıyın. Şablonlar debug etmesi kolaylaşır, testleri de yazması.
...