소스 정보
- 저장소
- ThibautBaissac/claude-code-architecture
- 최근 소스 활동
- 2025년 11월 19일 15:05
- 감지된 SKILL.md 언어
- 영어
- 스타
- 35
- 포크
- 4
설치 방법
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
소스 파일 검토
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
메뉴
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/ThibautBaissac/claude-code-architecture --skill rails-dev-guidelines명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
SOC 직업 분류 기준
SKILL.md 표시 중
| name | rails-dev-guidelines |
| description | Rails MVC patterns, ActiveRecord, conventions, and best practices |
This skill ensures consistent, maintainable Rails code following conventions and best practices for the application.
app/
├── models/ # Business logic and data models
├── components/ # View components (ViewComponent gem)
├── controllers/ # Request handling and response rendering
├── views/ # Templates (ERB, Turbo)
├── helpers/ # View helpers
├── jobs/ # Background jobs
├── mailers/ # Email sending
├── services/ # Complex business logic
├── queries/ # Complex database queries
├── forms/ # Form objects for complex forms
└── concerns/ # Shared modules (models & controllers)
When creating or modifying a model:
User, not Users)app/models/concerns/When creating or modifying a controller:
params.require().permit())before_action for authentication/authorizationrescue_from or inline rescues❌ Don't put business logic in controllers:
# app/controllers/users_controller.rb
def create
@user = User.new(user_params)
@user.email = params[:email].downcase
@user.role = 'member'
@user.save
UserMailer.welcome_email(@user).deliver_later
Analytics.track_signup(@user)
redirect_to @user
end
✅ Do move logic to models or services:
# app/controllers/users_controller.rb
def create
@user = User.create_with_defaults(user_params)
if @user.persisted?
redirect_to @user, notice: 'Welcome!'
else
render :new, status: :unprocessable_entity
end
end
# app/models/user.rb
class User < ApplicationRecord
after_create :send_welcome_email
after_create :track_signup
def self.create_with_defaults(params)
user = new(params)
user.email = user.email.downcase
user.role ||= 'member'
user.save
user
end
private
def send_welcome_email
UserMailer.welcome_email(self).deliver_later
end
def track_signup
Analytics.track_signup(self)
end
end
❌ Don't cram complex workflows into models:
class Order < ApplicationRecord
def process_payment
# 50+ lines of payment processing logic
end
end
✅ Do extract to service objects:
# app/services/order_processor.rb
class OrderProcessor
def initialize(order)
@order = order
end
def process
return false unless valid?
ActiveRecord::Base.transaction do
charge_payment
update_inventory
send_confirmation
end
true
rescue PaymentError => e
@order.errors.add(:base, e.message)
false
end
private
def valid?
@order.valid? && @order.items.any?
end
# ... more private methods
end
❌ Don't use raw params:
def create
User.create(params[:user]) # Security vulnerability!
end
✅ Do use strong parameters:
def create
@user = User.new(user_params)
# ...
end
private
def user_params
params.require(:user).permit(:email, :name, :role)
end
❌ Don't rely only on ActiveRecord validations:
# app/models/user.rb
validates :email, uniqueness: true
✅ Do add database constraints too:
# db/migrate/xxx_create_users.rb
create_table :users do |t|
t.string :email, null: false
t.timestamps
end
add_index :users, :email, unique: true
# app/models/user.rb
validates :email, presence: true, uniqueness: true
❌ Don't lazy load associations in loops:
@users = User.all
@users.each do |user|
puts user.posts.count # N+1 query!
end
✅ Do eager load associations:
@users = User.includes(:posts).all
@users.each do |user|
puts user.posts.count # No extra queries
end
Callbacks make models hard to test and reason about. Use service objects instead.
Never use save(validate: false) or update_column unless absolutely necessary.
Extract complex queries to query objects or scopes.
find_by_sql Without ReasonUse ActiveRecord query interface when possible.
Use slugs or UUIDs for public-facing URLs.
belongs_to :user
has_many :posts
has_many :comments, through: :posts
has_one :profile, dependent: :destroy
validates :email, presence: true, uniqueness: true, format: { with: URI::MailTo::EMAIL_REGEXP }
validates :age, numericality: { greater_than: 18 }
validates :terms, acceptance: true
scope :active, -> { where(active: true) }
scope :recent, -> { order(created_at: :desc).limit(10) }
scope :by_role, ->(role) { where(role: role) }
before_validation :normalize_email
after_create :send_notification
after_destroy :cleanup_associated_data
Need help with:
resources/associations.mdresources/validations.mdresources/queries.mdresources/service-objects.mdresources/background-jobs.mdresources/security.mdStatus: Core skill (~450 lines) | 6 resource files