<DAY111>マイグレーションファイルにファイルを追加するには?
学習状況
●学習日数 111日
●学習時間(本日)9.5時間
●累計学習時間 534.0時間
●一日あたりの平均学習時間 4.80時間
UPされたマイグレーションファイルをうっかり消してしまった場合
初歩的だが、少し困ったなので、アウトプットする。
rake db:migrate:status
にて状況を確認すると、マイグレーションファイルはUPされているが、
NODATEの状態であった。
マイグレーションファイルをdownの状態にさせて削除するにはどうするか確認した。
手順1 ダミーのマイグレーションファイルを生成する。
UPされているマイグレーションファイルのナンバーを確認。
ナンバーに応じてファイル名を記入
'20190517143914_tmp.rb'
ファイルには空の内容を記載する
class Tmp < ActiveReocrd::Migration def cange end end
これをすると、ファイルを認識する事ができる。
手順2 version指定してdownさせる
指定してdownさせると手違いがない。
bundle exec rakedb:migrate:down VERSION=20190517143914
外部キーを追加する手順
migrateファイルを作成
rails g migrate AddColumnHogeId
外部キーを追加する時に、オプションはセット。idは加えないがポイント
class AddColumnHogeId < ActiveReocrd::Migration[5.2] def change add_reference :TableName, :gaibukey, foreign_key: true end end
親要素が削除された子要素もひもづき削除するオプション
validates設定時に使用する。
belongs_to :hoge, dependent: :destory
<DAY110> エラーハンドリングについて
学習状況
●学習日数 110日
●学習時間(本日)10時間
●累計学習時間 527.5時間
●一日あたりの平均学習時間 4.79時間
エラーハンドリングとは?
エラー発生時に、エラー発生原因を特定しやすくする。
エラー発生時にエラー発生で処理を止めるのでなく、
エラー発生時を想定し処理を記述する事で、ユーザーの使い勝手を高める
エラーをキャッチしたい範囲を決める。
エラーを取得したい範囲を
'begin~~~end'にて囲む
例えば、
class ItemsController < ApplicationController begin def create create(params_create) end end end private params.require(:item).permit(:name)
エラー時に処理したい記述をrescue~~に記述する。
class ItemsController < ApplicationController begin def create create(params_create) rescue ActiveRecord :: RecordInvalid => e @item = e.record render :action => 'new' end end
DRYに記述するには?
createだけでなく、update,
destroyにも必要で同じ処理を記入するとDRYでは無くなります。
そのため、コントローラー全体に範囲を適用する'rescue from'を使用します。
class ItemsController < AplicationController rescue from ActiveRecord::RecordInvalia do |exseption| end
<DAY109>学習時間メモ
学習状況
●学習日数 109日
●学習時間(本日)5時間
●累計学習時間 517.5時間
●一日あたりの平均学習時間 4.69時間
今日はチーム開発の発表会であった。
<DAY108>JQUeryを使用したmarkdownフォーム生成アクション
学習状況
●学習日数 109日
●学習時間(本日)10時間
●累計学習時間 512.5時間
●一日あたりの平均学習時間 4.69時間
form for のクラス名の指定
曖昧だった。
:にて指定する。bootstraps使用時に確認。
<%= f.submit class:"aaaa"%>
入力されたformをjsで反映
入力された文字をmarkdown方式で出力。
シンタックスハイライト対応はイメージができなかったので、
とりあえず簡単にできそうなmarkdownに対応できるようにした。
対象viewの変更
app/views/answers/new
表示したいhtmlの親セレクタにidを指定した。
<div class= "col-xs-6 col-lg-6" id="form-text">
gemのredcarpetにて生成されるhtml部分をchangeを発火にして
出力するようにする。ただ、これだと、change発火の度にフォームが生成されてしまう。
フォームは一度だけ生成して、テキストの中身だけを変更するようにしたい。
イメージは掴めたので明日の朝一する。
app/assets/javascripts/form.jsを作成
$(function() { function appendHtml(input){ var html = `<div class="highlight" id="size-fix"> <pre class="highlight plaintext"> <code> ${input} </code> </pre> </div> ` $("#form-text").append(html) } $("#answer_content").on('change', function(e){ e.preventDefault(); inputText = $("#answer_content").val(); appendHtml(inputText) }) })
<DAY107>学習忘備録
学習状況
●学習日数 107日
●学習時間(本日)7時間
●累計学習時間 502.5時間
●一日あたりの平均学習時間 4.69時間
リロードしたらエラーが解消する件について
症状
送信ボタンが反応せず、リクエストが送信されない。
リロードしたら解消するエラー
原因
Turbolinksの挙動によるエラー
gemから削除する
Turbolinks
javascripts/application.js turubolinkの読み込みを解消させる
最後に
挙動について詳しく確認ができていない。
ソースコードを見るかもしくは、記事を検索して
理解に努める。
効果確認したメソッド
text()メソッド
text("aaaa")
()内の情報を取得する
<DAY106> bootstrapにてデザインとレスポンシブ対応
*学習状況
●学習日数 106日
●学習時間(本日)7時間 ●累計学習時間 495.5時間
●一日あたりの平均学習時間 4.67時間
*bootstrapにて実装
メモするより都度調べて実装していた。 アウトプットしていなかった。 次また本格的に実装するときにまとめる。
<DAY105>アプリ制作RESTな設定について
学習状況
●学習日数 105日
●学習時間(本日)10.5時間
●累計学習時間 488.5時間
●一日あたりの平均学習時間 4.65時間
フォームに入力した回答を別モデルに保存するページを作成する
どのような構成を検討していたか?
(1)tweets#indexアクション(問題のタイトルを一覧で表示)
(2)tweets#showアクション(問題の詳細をみる)
(3)tweets#showアクション(問題を確認しフォームに回答を入力)
(4)入力されたフォームを別のリソースであるanswer#createに飛ばしモデルオブジェクトを保存
ハマっていた理由
form forを使用していたが、保存するモデルが変わる。モデルオブジェクトをうまくはめ込めず。
できるだろうが、今は製作物を仕上げるのが優先なので、方法を変更した。
成功した構成
(1)tweets#indexアクション(問題のタイトルを一覧で表示)
(2)tweets#showアクション(問題の詳細をみる)
(3)tweets#showアクション(問題を確認)
(4)tweets#showアクション(link_toを使用し、answernewアクションに飛ばす)
(5)answers#newアクション(answerインタスタンスを生成)
(6)answers#createアクション(Anserモデルを用いてDBにデーターを保存)
(7)answers#show(保存されたデーターの出力)
最後に
こんな簡単な事もテキストの誘導ないと詰まってしまうが、
もうこんな事でつまる事はないので、少し成長した。