
Цель: предотвратить ошибки, забудьте о большинстве проблем с производительностью и тратьте больше времени на код вместо отладки и исправления тестов.
Таким образом, сделайте написание потрясающих веб -приложений быстрым, веселым и легким.
У Lucky есть новый новый набор гидов, который позволяет легко начать работу.
Не стесняйтесь сказать привет или задавать вопросы в нашем чате.
Или вы можете скопировать реальное рабочее приложение с Lucky Jumpstart.
Чтобы установить Lucky, прочитайте установки Lucky Guides для вашей операционной системы. Руководство проведет вас через установку утилиты командной строки, используемой для создания новых счастливых приложений.
Будьте в курсе, следуя @luckyframework в Твиттере.
API (Main)
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 маршрута.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 так как они не помечены как невозможные). # 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 , чтобы получить постоянные пользователи более 1 недели назад. У 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 . Передайте параметры with использованием: Users::Show.with(user.id) . Больше не нужно пытаться запомнить помощников по пути, и является ли помощник плюрализован или нет - если вы забудете передать парам на маршрут, Lucky даст вам знать во время компиляции.column nickname : String? Как и Nilable, Lucky не сможет скомпилировать страницу, если вы только что сделали text user.nickname nil Так что вместо этого мы добавляем запасную часть "No Nickname" . Больше не случайно печатать пустой текст в HTML! Вы должны убедиться, что установили кристаллические зависимости.
shards installcrystal spec из корня проекта. См. Appling.md
Мы любим всех членов сообщества, которые проделали тяжелую работу, чтобы сделать счастливчику лучше. Если вы один из этих людей, мы хотим дать вам футболку!
Чтобы получить рубашку, мы просим, чтобы вы внесли значительный вклад в Lucky. Это включает в себя такие вещи, как отправка PRS с исправлением ошибок и реализациями функций, помощь другим участникам решать проблемы и развертывание приложений реального мира с использованием Lucky!
Чтобы претендовать на свою рубашку, заполните эту форму.
Полсмит Пол Смит - оригинальный создатель Lucky
Сделано из ouctrib.rocks.
lucky watch Bounderly на Sentry. Спасибо @samueleaton!