This page looks best with JavaScript enabled

『パーフェクトRuby on Rails』6章

 ·   ·  ☕ 3 分で読めます

6章

Bootstrap

BootstrapのインストールにはjQueryとpopper.jsも必要。
yarn install bootstrap@4.4.1 jquery@3.5.1 popper.js@1.16.1

1
2
import "bootstrap"
import "bootstrap/scss/bootstrap.scss"

いろいろメモ

form_with

form_withはデフォルトでdata-remote="true"属性を持つformタグを作成する。rails-ujsはこれを捉えて自動的にAjaxで非同期にフォームの内容を送信する。
なので、バリデーションエラーはSJR(Server-generated-JavaScript Responses)で対応するとよいと考えている。例えば……

1
2
3
4
5
6
def create
  @event = Event.new(event_params)
  if @event.save
    redirect_to @event, notice: '作成しました'
  end
end

で、失敗時はcreate.js.erbでエラーメッセージを表示するJSを組む。
このAjaxの挙動をオフにするときは、form_withremote: trueオプションを付ける(そうはいっても大概付けるよね……)。

直接getアクセスしたときのためにRoutingErrorをraiseする?

p.330

TicketController#newを定義する意味がわからなかった。
link_to '参加する', new_event_ticket_pathってログインしていないときにしか表示しないエラーなんだから、authenticated?メソッドに直接ぶっ飛ばせばよくね?と思ったけど、ルーティング用意しないといけない&privateだから呼び出せない?から?
まあ、authenticated?はアクションとして用意したメソッドじゃないから、直接飛ばすのは歪になるけども。。。
ルーティングで拾ってルーティングエラー用のアクション(これはApplicationControllerで作るか?)に飛ばす、だといかんのかね?
なんかわざわざnewにするのは、betterではあるけどbestかというと微妙っぽい気がする。
これは現場によって設計が違いそうな気がするけどどうなんでしょー????

と思ってRUNTEQのslickに投げたら、講師陣も同じことを言っていました。
ルーティングでonlyオプションをつければいいのでは、とのこと。

ていうか、new_event_ticket_pathじゃなくて"/sonna_routing_ha_naiyo"とかにすれば、undefined local variable or methodってエラーも出ないからいいのでは。

バリデーションエラーメッセージ

errors[:base]にメッセージを格納すると、余計な言葉がないエラーメッセージにできる!!

1
2
3
4
errors[:base] << "未終了イベントが存在します"
=> ["未終了イベントが存在します"]
errors.full_messages
=> ["未終了イベントが存在します"]

Active Record バリデーション - Railsガイド

  • throw(:abort)
    • destroy処理を中断する

destroyのバリデーションするとき、return falseじゃなくてthrow :abortになったよ - Qiita

Share on

aiandrox
Written by
aiandrox
今日も楽しく明日も楽しく

目次