パーフェクトRails6章
6章
イベント管理のアプリを作る
OAuthとは
第三者となるアプリケーションに対して安全にアクセス制限を提供するためのプロコトル。
Github認証
omniauthでGoogleを使う。
!!session[:user_id]
これと
session[:user_id].present?
て同じだよな。。二重not、意味はわかるがなんか気持ち悪い
def self.find_or_create_from_auth_hash!(auth_hash)
provider = auth_hash[:provider]
uid = auth_hash[:uid]
nickname = auth_hash[:info][:nickname]
image_url = auth_hash[:info][:image]
User.find_or_create_by!(provider: provider, uid: uid) do |user|
user.name = nickname
user.image_url = image_url
end
end
これわかりやすいよねー。シンプルだ
ログインとログアウトは何度もやったので割愛します
Eventモデルの作成
resource コマンド久しぶりに使ったなw
Time.zone.nowのほうが一般的で、Time.nowなどの組み込みクラスは非推奨
datetime_select 久しぶり
下の #errors で設定したところに
- now = Time.zone.now
%h1.mt-2 イベント作成
= form_with(model: @event, class: "form-horizontal") do |f|
#errors
.form-group
= f.label :name
= f.text_field :name, class: "form-control"
.form-group
= f.label :place
= f.text_field :place, class: "form-control"
.form-group
= f.label :start_at
%div
= f.datetime_select :start_at, start_year: now.year, end_year: now.year + 1
.form-group
= f.label :end_at
%div
= f.datetime_select :end_at, start_year: now.year, end_year: now.year + 1
.form-group
= f.label :content
= f.text_area :content, class: "form-control", row: 10
.form-group
= f.label :image
= f.file_field :image, class: "form-control-file"
= f.submit class: "btn btn-primary"
下記が失敗した時
def create
@event = current_user.created_events.build(event_params)
if @event.save
redirect_to @event, notice: "作成しました"
end
end
create.js.erbがrenderしてnewのところに挿入される(views/application/_errors.html.haml は省略)
document.getElementById("errors").innerHTML = "<%= j render("errors", errors: @event.errors) %>"
これ、RUNTEQでもやったけど当時は意味わからんかったけど流石にわかるなー。
これをSJRと言うのは知らなかったw
ajaxでぬるぬる動くのはいいな。ただこれは、Vue.jsとかと対立するらしい(ならVueでよくね?ってなるのね)
あとは省略。
イベント参加、退会機能、かなり濃かった