
الهدف: منع الأخطاء ، ونسيان معظم مشكلات الأداء ، وقضاء المزيد من الوقت على الكود بدلاً من اختبارات تصحيح الأخطاء وإصلاحها.
باختصار ، اجعل كتابة تطبيقات الويب مذهلة سريعة وممتعة وسهلة.
Lucky لديه مجموعة جديدة من الأدلة التي تجعل من السهل البدء.
لا تتردد في قول مرحبًا أو طرح أسئلة في غرفة الدردشة الخاصة بنا.
أو يمكنك نسخ تطبيق عمل حقيقي مع Lucky JumpStart.
لتثبيت Lucky ، اقرأ أدلة Lucky لتثبيت نظام التشغيل الخاص بك. سوف يسيرك الدليل من خلال تثبيت أداة سطر الأوامر المستخدمة لإنشاء تطبيقات محظوظة جديدة.
مواكبة من خلال اتباع luckyframework على Twitter.
API (رئيسي)
class Api::Users::Show < ApiAction
get " /api/users/:user_id " do
user = UserQuery .find(user_id)
json UserSerializer .new(user)
end
endget "/sign_in" للطرق غير الراحة.user_id لأن هناك معلمة user_id route.json لتقديم JSON. استخراج مسلسلات لاستجابات JSON القابلة لإعادة الاستخدام. # Set up the model
class User < BaseModel
table do
column last_active_at : Time
column last_name : String
column nickname : String ?
end
end? إلى النوع عندما يمكن أن يكون العمود nil . سيساعدك Crystal بعد ذلك على تذكر عدم استدعاء الأساليب التي لن تنجح.last_active_at و last_name نظرًا لعدم تمييزها على أنها Nilable). # Add some methods to help query the database
class UserQuery < User::BaseQuery
def recently_active
last_active_at.gt( 1 .week.ago)
end
def sorted_by_last_name
last_name.lower.desc_order
end
end
# Query the database
UserQuery .new.recently_active.sorted_by_last_nameUser::BaseQuery تلقائيًا عند تحديد نموذج. يرث منه لتخصيص الاستفسارات.lower على عمود String للتأكد من أن Postgres يقوم بفرز كل شيء في الأحرف الصغيرة.gt لجعل المستخدمين نشطين أكثر من أسبوع واحد. لدى Lucky الكثير من التجريدات القوية لإنشاء استعلامات معقدة ، وكتابة طرق محددة (مثل lower ). class Users::Index < BrowserAction
get " /users " do
users = UserQuery .new.sorted_by_last_name
render IndexPage , users: users
end
end
class Users::IndexPage < MainLayout
needs users : UserQuery
def content
render_new_user_button
render_user_list
end
private def render_new_user_button
link " New User " , to: Users :: New
end
private def render_user_list
ul class: " user-list " do
users.each do | user |
li do
link user.name, to: Users :: Show .with(user.id)
text " - "
text user.nickname || " No Nickname "
end
end
end
end
endneeds users : UserQuery المترجم أنه يجب تمرير المستخدمين من نوع UserQuery .Users::New تمرير params with : Users::Show.with(user.id) . لا مزيد من المحاولة لتذكر مساعدي المسار وما إذا كان المساعد متعجدًا أم لا - إذا نسيت أن تمرر معلمة إلى مسار ، فسيعلمك Lucky في وقت الترجمة.column nickname : String? كما Nilable ، سيفشل Lucky في تجميع الصفحة إذا قمت للتو بإجراء text user.nickname لأنه لا يسمح بطباعة nil . لذا بدلاً من ذلك ، نضيف احتياطيًا "No Nickname" . لا مزيد من طباعة النص الفارغ بطريق الخطأ في HTML! تحتاج إلى التأكد من تثبيت التبعيات البلورية.
shards installcrystal spec من جذر المشروع. انظر المساهمة
نحن نحب جميع أفراد المجتمع الذين قاموا بعمل شاق ليحسن الحظ. إذا كنت واحداً من هؤلاء الأشخاص ، فنحن نريد أن نقدم لك قميصًا!
للحصول على قميص ، نطلب أن تكون قد قدمت مساهمة كبيرة في Lucky. يتضمن ذلك أشياء مثل تقديم PRS مع إصلاحات الأخطاء والتطبيقات ، ومساعدة الأعضاء الآخرين على العمل من خلال المشكلات ، ونشر تطبيقات العالم الحقيقي باستخدام Lucky!
للمطالبة بقميصك ، املأ هذا النموذج.
Paulcsmith Paul Smith - المبدع الأصلي لـ Lucky
صنعت مع contrib.rocks.
lucky watch يعتمد بشكل كبير على Sentry. شكرا samueleaton!