アプリケーション作成備忘録第二弾
土日は濃い勉強が多かったので、忘れないう内に書き留めていきます。
①flushメッセージでエラー文を表示させる
結論:コントローラーでifを使い、失敗した時に
flash[:notice] = @○○.errors.full_messages と表記。
ビューファイルで出したい部分に
<% if flash[:notice] %>
<p><%= flash[:notice] %></p>
<% end %>
と記述すれば完成。
②売却済商品に処理をしたい時の指定方法
結論:if @item.buy.present?
前提としてコントローラーで@itemを定義している時に使用可能。
この表現に辿り着くのに地味に時間がかかってしまった、、
初めは、if @item.id == buy.item_idみたいな書き方をしていたり(笑)
③フォームのデータ保存に失敗した時にフォームの中身を空にしたい
結論:form_withのmodelを選択しない。
中身にあるなしに応じて処理が変わるが、modelを選択すると中身が残るので
modelを渡さないというのが1つの選択肢。その際パラメーターが少し変わるので注意。
このやり方以外にも、①のflushメッセージ+redirect_toを使うやり方もできた。
④Payjpを用いたクレジットカード決済時の流れ
送信ボタンをイベント発火に設定し、preventDefaultでrailの処理を一旦止める。
フォーム記載内容をJavaScript+FormDataオブジェクトを使い、DOMから取得。
取得した値は変数に代入しておく。
token作成の為、PayjpオブジェクトのcreateTokenメソッドを使って生成。
通信に成功した時のみtokenを生成し、受け取ったtokenのidを変数に代入。
テンプレートリテラル+valueを使いHTMLタグにtokenを組み込み、
insertAdjacentHTMLメソッドを使い、作成したHTMLタグをsubmit要素にねじ込む。
これにより、token情報がsubmitされた時に一緒にコントローラーへ運ばれる。
クレジットカードの情報はDBに保存することはまずいので、
これらの処理を終えたらremoveAttributeで入力されたname属性を指定し、削除。
その後、submitで送信する。
⑤form_withによるname属性とid属性の自動取得について
結論:name属性とid属性を指定していなくても自動で取得可能(検証ツールで可視化)
modelを指定した場合
name="model[フォーム記述カラム]"
id="model_フォーム記述カラム"
urlを指定した場合
name="フォーム記述カラム"
id="フォーム記述カラム"
model,id両方を指定した場合
modelを指定した時と同じ表記。
JavaScriptを使用しフォームの値を取り出す時に使いました。
以上。
JavaScript楽しいですね!