
Tujuannya: Cegah bug, lupakan sebagian besar masalah kinerja, dan habiskan lebih banyak waktu untuk kode daripada men -debug dan memperbaiki tes.
Singkatnya, buat penulisan aplikasi web yang menakjubkan dengan cepat, menyenangkan, dan mudah.
Lucky memiliki serangkaian pemandu baru yang membuatnya mudah untuk memulai.
Jangan ragu untuk menyapa atau mengajukan pertanyaan di ruang obrolan kami.
Atau Anda dapat menyalin aplikasi yang berfungsi nyata dengan Lucky Jumpstart.
Untuk menginstal Lucky, baca pemasangan Lucky Guides untuk sistem operasi Anda. Panduan ini akan memandu Anda melalui pemasangan utilitas baris perintah yang digunakan untuk menghasilkan aplikasi keberuntungan baru.
Tetap up to date dengan mengikuti @luckyframework di Twitter.
API (Utama)
class Api::Users::Show < ApiAction
get " /api/users/:user_id " do
user = UserQuery .find(user_id)
json UserSerializer .new(user)
end
endget "/sign_in" untuk rute non istirahat.user_id dihasilkan karena ada parameter rute user_id .json untuk membuat JSON. Ekstrak Serializer untuk tanggapan JSON yang dapat digunakan kembali. # Set up the model
class User < BaseModel
table do
column last_active_at : Time
column last_name : String
column nickname : String ?
end
end? ke jenis saat kolom bisa nil . Crystal kemudian akan membantu Anda ingat untuk tidak memanggil metode yang tidak akan berhasil.last_active_at dan last_name karena mereka tidak ditandai sebagai 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 dihasilkan secara otomatis saat Anda mendefinisikan model. Mewarisi dari itu untuk menyesuaikan kueri.lower pada kolom String untuk memastikan Postgres mengurutkan semuanya dalam huruf kecil.gt untuk membuat pengguna aktif lebih besar dari 1 minggu yang lalu. Lucky memiliki banyak abstraksi yang kuat untuk membuat kueri yang kompleks, dan mengetik metode spesifik (seperti 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 memberi tahu kompiler bahwa itu harus dilewati pengguna tipe UserQuery .Users::New . Pass params menggunakan with : Users::Show.with(user.id) . Tidak ada lagi yang mencoba mengingat pembantu jalur dan apakah penolong itu terbiasa atau tidak - jika Anda lupa untuk melewati param ke rute, Lucky akan memberi tahu Anda pada waktu kompilasi.column nickname : String? Sebagai nilable, Lucky akan gagal mengkompilasi halaman jika Anda baru saja melakukan text user.nickname nil Jadi alih -alih kami menambahkan Fallback "No Nickname" . Tidak ada lagi yang secara tidak sengaja mencetak teks kosong di HTML! Anda perlu memastikan untuk memasang dependensi kristal.
shards installcrystal spec dari Root Proyek. Lihat Contributing.md
Kami menyukai semua anggota masyarakat yang telah bekerja keras untuk membuat Lucky lebih baik. Jika Anda salah satu dari orang-orang itu, kami ingin memberi Anda t-shirt!
Untuk mendapatkan kemeja, kami meminta Anda telah memberikan kontribusi yang signifikan bagi Lucky. Ini termasuk hal -hal seperti mengirimkan PR dengan perbaikan bug dan implementasi fitur, membantu anggota lain mengatasi masalah, dan menggunakan aplikasi dunia nyata menggunakan Lucky!
Untuk mengklaim baju Anda, isi formulir ini.
Paulcsmith Paul Smith - Pencipta Asli Lucky
Dibuat dengan contrib.rocks.
lucky watch sangat didasarkan pada Sentry. Terima kasih @samueleaton!