miyamon_good’s blog

エンジニア×パチンコ・パチスロ

アプリケーション作成備忘録第二弾

土日は濃い勉強が多かったので、忘れないう内に書き留めていきます。

 

①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楽しいですね!