実践で学ぶRuby on rails 〜仮説千本ノック〜

プログラマーとして独立するため日々スキルアップに励んでいます。優れたプログラマは仮説を立てるのがうまい。そこを目指して仮説を立てては検証する日々です!!

一覧を作る方法

・部分テンプレート グループチャットの一覧を表示させるページで、サッカーに関するチャットを全て一覧表示させる場合。 投稿者名、投稿内容のビューファイルに関する記述は一度で済ませたいので、1組分だけ書いて、部分テンプレート化する。 それをメイン…

pathだけでなく、追加情報を与えないといけないケース

チャットアプリで、 メッセージを作成のため、createアクションを定義する際、 メッセージ作成が成功した場合の処理として、 メッセージ作成フォームがあるビューindex.htmlファイルへのredirectを指定したい。 (つまり、作成が終わったら、また、作成済み…

N+1問題というより1+N問題

サッカーに関する情報を整理するためのテーブルが2つある。 teamsテーブルと、それぞれのteam所属するplayersテーブル teams |id |name |player_id| |1 |バルセロナ | 1 | |2 |レアルマドリード| 2 | |3 |マンチェスターシティ| 3 | players |id |name | |1 …

サーバーの再起動が必要な状況一覧

※やりがちだけど、、、本当は不要 ・routes.rbの変更後 ・db:migrete実行後

コントローラーへのアクションの記述を省けるケース

通常、グループの新規作成ページ、編集ページを呼び出すときは その目的だけのためにアクションを定義するため、 中身がありません。 もちろん、この記述にも、同名のビューファイルをレスポンスとして返してくれるという役割はありますが。 group_controlle…

部分テンプレート

■変数 チャットアプリの実装にあたり、 グループ新規作成用のnew.html.haml、 グループ更新用のedit.html.haml この2つのファイルについて、 ページのトップに表示するタイトル以外の 送信フォーム部分が同じであったので、 被ってる部分のコードは、_form.h…

each文

■要素を沢山書かなくても、簡単に配列から一覧が作成できる チャットアプリで、ログインユーザーが所属しているグループ名をサイドバーに、縦にずらっと並べたい時、 グループの数だけ、要素を記述しなければならないのでしょうか?? もちろんそんなことは…

errors.full_messagesメソッドの理解

インスタンス.errors.full_messagesメソッドは、 ビューファイル内で使用することで、インスタンスについて発生した全てのエラーメッセージを配列で取得。 つまり @group.errors.full_messagesによって、 インスタンス@groupについて発生したエラーメッセー…

エラーメッセージをカスタマイズする。

例えば、新規チャットグループを、グループ名が空のまま登録しようとした時、 nameを入力してください。 というエラーメッセージが表示されます。 エラーメッセージって、デフォルトでは英語表記になっています。 これを グループ名を入力して下さい。 とか…

エラーの多くは、不要なスペースにより発生する!!

■エラー %li = message ■OK %li= message 違いは、liの次は=を書けばいいのに、間に半角スペースを挟んでいる点。 もちろん、=とmessageの間の半角スペースはOKですよ。

エラー確認(binding.pry編)

アクションや、ビューファイル内に記述することで、 アクションやビューファイルの読み込みを途中で止めて、 変数に格納されている中身を確認できるbinding.pry 何にでも使えるわけではなく、 ruby,rails用のエラー確認ツールとなっています。 とはいえ、htm…

フラッシュメッセージの使い方と実装方法

よく見かける、ログイン時、ログアウト時等のタイミングで、 画面上部に 「ログインしました」 「ログアウトしました」 など、ある動作が行われたことを一回限り知らせてくれるメッセージ、それがフラッシュ、一回限り、メッセージと呼びます。 実装にあたり…

エラー解決力を磨くには??

エラー解決が苦手です。 なぜなら、学校の勉強でみなれた英文法とは形式が異なるし、 単語の意味が抽象的で、辞書で調べても、腑に落ちる エラー文だけでは、細かい内容が読み取れないし、 さらには、エラー文とは関係ないところに原因があったりするから。 …

フォームに何も入力されなかった時のエラー表示方法

チャットアプリのグループ作成機能を作るにあたり、 グループ作成フォームのグループ名がブランクのまま、 フォームが送信された場合に、エラーを表示させたい。 例えば、こんな感じです。 「エラーが〇〇件あります」(件数) 「グループ名を入力してください…

ストロングパラメーター

■そもそもの話 railsでは、セキュリティ上の観点から、 ストロングパラメーターで許可をしたカラムに保存するデータとして、指定のキーで送られたデータだけを保存するようになっています。 ■基本的な構造 params.require(:データが属するテーブルのモデル) …

renderとredirect_toの使い分け

通常、railsではアクションが発火した時、 アクションと同名のビューファイルがレスポンスとして返されます。 indexアクションであればindex.html.haml editアクションであればedit.html.hamlというように。 では、この法則から外れて、特定のビューファイル…

rollbackがかかるファイルは直近の1つだけ

実装を進めるにあたり、マイグレーションファイルの定義に漏れがあったことに気づき、 1回rails db:rollbackをしてから、 rails db:migrateを実行しました。 しかし、変更した内容が反映されない!! 勘違いしていたのですが、rollbackは直近でmigrateされた…

ログイン中のユーザーを新規作成グループのユーザーに追加したい

チャットアプリにログインして新規グループ作成する際、 ログイン中のユーザーは当然にそのグループのユーザーに含めることになりますが、下記のコードを書くことで実現できます。 ■group_controller.rb def new @group = Group.new @group.users << current…

form_forの使い方

現在プログラミングスクールのカリキュラムで、チャットアプリの実装を行なっています。 チャットはテーマ別に行われるため、 グループを、「サッカー」「バスケ」等、テーマ別に作るためのグループ作成フォームを作成します。 フォームに、グループ名、所属…

どんなURLを出してもログインページに遷移してしまう。。

アプリの実装中、 例えば、index.html.hamlを見た目を確認するため、 ルートパスを入力したとする。 ところが、ブラウザにルートパスを入れてエンターキーを押すと、 ログインページ表示のためのURLに変化し、 ログインページが表示されてしまう。 これは、…

モデルを作るということ

モデルを作るということ。 それはすなわち、テーブルを作成することである。 別々のものではあるが、モデルはテーブルを操作するために機能するので、モデルをコマンドで作成した際、テーブルも同時に出来上がるようになっている。 はじめ、ターミナルで「gr…

外部ファイルの読み込み順

htmlのスタイリングを行うため、役割別にファイルを分けて、複数scssファイルを用意することがあります。 最終的には、中心となるscssファイル(例application.scss)に、 ずらっと、適用させたいscssファイルを記述し、インポートして、全てのscssファイルを…

全てのbeforeactionの頂点に立つキング

before_actionと言えば、 全てのアクションが発火する手前で発火させたいアクション。 通常は、各コントローラファイルに記述します。 (もちろん、このアクションが発火する前は動かさないという設定も可能) しかし、1つのコントローラ内にとどまらず、 …

初心者がうかつにpushを取り消すると失敗して泣くことになる

githubの使い方をぼんやりとしかわからない状態で、 1週間かけて実装したビューをコミット、プッシュしましたが、誤ってmasterブランチにやってしまいました。 masterにプッシュするということは、 レビューを全て終えた完成品をあげることと同義。 すなわ…

画像を送信機能

メッセージを送るとき、画像も送りたい。 メッセージアプリでよくあるのが、 フォームの中にある写真のアイコンを押すと、 ファイル選択ウィンドウが開く。 この画面の材料は二つ。 ・押すための写真アイコン ・ファイル選択機能(input要素・type="file") こ…

レイアウトの余白はpaddingで決める

テキストA、アイコンBは、ページの上下、左右から〇〇px離した所に配置したい。 要素A、Bそれぞれのクラスにマージンを設定したり、 親要素にposition: relativeを設定して、A、Bにposition: absoluteを設定すればいいんじゃね?? そう思っていましたが、こ…

🕶世にも奇妙な現象(2カラムが横に並ばない)

チャット用のページとして、2カラムのページを作っていたら あれ???左側に来るサイドバー、右側のチャットが表示されるメイン部分の両方にfloat: left当てたのに、横並びにならない。。 スクールの先生に聞くも理由は不明。 ありがちなのは、幅を大きく…

うまく質問ができない

今、プログラミングスクールに通っているのですが、 わからない部分があると、その都度メンターさんに口頭で質問できるので、考えがまとまっていなくても、PC画面をみながら、会話の中でなんとか、わからない部分を伝えることができていました。 しかし、カ…

解決すべきことはいつでも『1つ』だけ

プログラミングを学習していると、 「何がわからないかわからない」 「何を調べればいいかわからない」 という状態によーく陥ります。 その状態で何時間もPCの前でフリーズすることもしばしば。 勉強をやめたくなる状況ベスト5に数えられるシチュエーション…

はじめてのgithub

本日からgithubを使い始めました。 IT関係のニュースでよく耳にはしていたので、 ネットワーク上にソースを置いて、 複数人での開発を行えるようにするためのツール何だろうなと、 漠然としたイメージを抱いていました。 実際使ってみると、、まさかの英語表…