コロナで無職になった私がエンジニアになるまで

コロナの影響で前職をクビになってから、エンジニアを目指してます。

オリジナルアプリ作成記 3 ~マイグレーションの追加、記事投稿機能の実装、エラーメッセージの表示~

マイグレーションファイルとテーブルにカラムを追加(references)

まずは、依頼投稿機能(記事投稿)のテーブルに投稿したユーザーのuser_idを追加できるようにマイグレーションファイルを追加した。

$ rails g migration AddUserIdToRequests

できたファイルに以下のように追記

 
  def change
    add_reference :requests, :user, foreign_key: true
  end

 

 

ここでforeign_key: trueのように外部キー制約を行うのを忘れずに。
あとはrails db:migrateでおしまい!

 

アソシエーション & ストロングパラメーター

次に投稿してみてuser_idがログインしているユーザーで記録されるように実装。
requestモデルとuserモデルの間でアソシエーションを組むことからスタート。

requestモデル => belongs_to :user
userモデル => has_many :requests

ここでrequestsコントローラーのストロングパラメーターに注意する。

private
def request_params
params.require(:request).permit(:name, :title, :text, :category_id)
.merge(user_id: current_user.id)
end

注意点は、外部キーを統合させる必要がある点。
merge(user_id: current_user.id)でログイン & 記事投稿したユーザーのidも統合されて記録されるようになる。

current_userはdeviseを導入していることで使えるようになる。

これで記事投稿してみると、requestテーブルに無事記録され、user_idもログインしているユーザーのidが記録されていた。

 

redirect_to & render
続いて、記事投稿に成功するとTopページへ失敗すると再度記事投稿ページへ戻される機能を実装。

def create
@request = Request.new(request_params)

if @request.save
redirect_to root_path
else
render :new
end
end

早い話こんな感じ。
特に考察することもなく、テンプレート的な記述。

問題は、renderでエラーメッセージをいかにして表示するか。
レイアウト崩れをどう直すかという点。
明日改めてまとめたいと思う。

今日はおしまい!
ここまで順調に進んでいる気がする!

 

オリジナルアプリ作成記 2 ~記事投稿ページの作成、ActiveHashでカテゴリーの設定~

眠い目こすりながら今日もアプリ作成です。
仕事のある日は、割と簡単な作業だけにして休みの日にガッツリ進めたい。
今日は、前回準備した記事投稿ページのレイアウトと、ActiveHashを設定。

f:id:Kosei_Program:20201221214551p:plain

レイアウトってカッコつけて言ったけども、やはりダセェ。
デザインできる人ってすげぇなって思う。
単に自分がデザインの勉強をしていないだけな気もするけども。


f:id:Kosei_Program:20201221214810p:plain

中身はこんな感じ。
埋め込みrubycssの設定ってどうするんだろ、って思って調べながら
適当にデザイン。
ここまでは特につまづくことなく。

続いてActiveHash。
まずはGemをインストール。

 
gem 'active_hash'

 

追加してbundle installで中身の作成です。

カテゴリーの中身を設定するためのmodelを作成。
マイグレーションファイルは必要ないので、スキップする。
% rails g model category --skip-migration
 
出来上がったmodelにActiveHash::Baseを継承させて設定する。
class Category < ActiveHash::Base
 self.data = [
   { id: 1, name: '--' },
   { id: 2, name: '作詞依頼' },
  { id: 3,........},

] end
こんな感じで設定したいカテゴリーを好きな数だけ追加する。

Requestの方のマイグレーションファイルにこのCategory_idを追加する。
今回は作成時にすでに作ったので、問題ない。

次にこのCategoryモデルとRequestモデルのアソシエーション。
class Request < ApplicationRecord
  extend ActiveHash::Associations::ActiveRecordExtensions
  belongs_to :category
end
ActiveHashを使ったアソシエーションの設定はextend~~のように記述してmoduleを取り込む必要がある。

今度はCategoryモデル側の設定。
  include ActiveHash::Associations
  has_many :requests
この記述を追加する。
これでアソシエーションの設定は終了。

htmlでは、collection_selectでプルダウン形式でカテゴリーを表示させる。
<%= form.collection_select(保存されるカラム名, オブジェクトの配列, カラムに保存される項目, 選択肢に表示されるカラム名, オプション, htmlオプション) %>

大雑把にまとめたけども、今日やった作業はこんな感じ!
休みの日に実際に投稿してみて保存されるかを試したい。


オリジナルアプリ作成記 ~トップページ、Userの管理機能、記事投稿機能の準備~

今日からこれまでスクールで学んだことを生かしてオリジナルアプリを作成していく。
目標は1ヶ月で仕上げること!
年末年始の忙しい時期にしてはハードルの高い目標だなと思う。

まずは、レイアウト的な物を作ることにした。
データ設計とかは大雑把だけどもメモ帳にまとめて、とりあえず作ってみることに。

f:id:Kosei_Program:20201219183453p:plain


だ、ダセェ…笑

我ながらセンスのないレイアウト、色使い…。
ある意味感動する。絵心はないのは昔からだけども、こういうところにも出るんだなぁ

しかし問題ない。重要なのは機能の面。
今のところ予定では、ContentA(赤)、ContentB(青)、ContentC(黄)の三つがこのアプリのメインの機能になる。
名前は今のところ適当。
それぞれに

「全ユーザーが投稿した依頼のまとめ(記事一覧)」

「依頼投稿機能(新規記事投稿)」

「フォロー、フォロワー間のチャット機能(これは実現できたらいいな程度に)」

html、CSSは見れればいいや程度に適当に編集。
もちろんデザインがしっかりしていればユーザーも使いやすいだろうけど、
とりあえずは機能をしっかり作っていきたい。
余裕があればデザインにも力を入れる。多分ないけど。


次に取り組んだのは、User管理機能。いわゆるログイン、ログアウト、新規作成。
deviseをインストールして、ちょちょいとやるだけの簡単なお仕事。
これはもはやどのアプリを作成する上でも避けられない作業だし、
やることは全部一緒なので、テンプレート的に暗記すればいいかなと思った。
そこまで内容も難しくないしね。

f:id:Kosei_Program:20201219184346p:plain

やっぱりダセェ!!
なんか必要最低限の機能を持った物を作ると入ったもののダサすぎる。
でも中央揃えとか頑張ったんや。ちょっとでも見栄えを良くしようと思って。
色って大事だなぁ。

新規登録、ログインして、テーブルに情報が登録されてログアウトできて〜までは
deviseで一通り実装できる。
問題は、ログアウトする際にmethod: :deleteを記述することを忘れずに。

ストロングパラメータに関しても注意が必要。
application_controllerにdeviseに関してのストロングパラメータを書く必要がある。

deviseの処理を行うコントローラーはGemに書かれているためである。
Gemは直接編集することはできないためapplication_controllerに書くという流れ。

deviseを使用して実装を行った場合は、paramsの他に、paramsとは異なった形のパラメーターも受け取っている…らしい。
=> deviseコントローラーにストロングパラメーターを設定する必要がある。
   paramsとは異なった形のパラメーターを受け取るように設定する必要がある。

異なった形のパラメーターはdevise_parameter_sanitizerというメソッドを使用する。

class ApplicationController < ActionController::Base
  before_action :configure_permitted_parameters, if: :devise_controller?

  private
  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:nickname])
  end
end

こんな感じ。
ログイン、新規登録をする時などのリクエストからパラメーターを取得することができる。
第一引数に機能、次に許可するカラムを記述する。
今回はnicknameというカラムを後から追加したので、それを新規登録する際に許可するようにしておく。

if: :devise_controller?でdeviseに関する処理のみこれらのメソッドが使用されるようにする。
application_controllerで全体に影響するけど、deviseのみに使用したいのでこのように記述する。


あとは、application.html.erbのヘッダー部分にログインしている時、ログアウトしている時の状態で表示を分ける。


とりあえずユーザー管理機能は実装できたので、次に記事投稿機能の準備だけしておこうと思って取り組み始めた。
とは言っても、モデルを作って、ルーティング設定、コントローラー作成、ビューファイルの作成まで。
コンソールを使って、データを登録して、ビューファイルに表示させるところまでやって…。

今日はここまで!
ボチボチやっていきましょう。

今日のまとめ! ~Ruby on Rails で プログラミングの勉強8~

だいぶ日数が空いてしまった。

学習は進めていたものの、遅くになってしまってブログまで書く気力がなかった。

こういうところ直さないといかんよなー。

 

GitHubについて学習したことを書いていきます。

 

続きを読む

今日のまとめ! ~Ruby on Rails で プログラミングの勉強7~

復習だけに使ったら、ブログに書くことなくなっちゃった。
ので、今日は新しく学んだことを書いていきます。

他の生徒さんのブログの内容があまりにも充実しすぎてて、
自分のブログのだらけ具合に恥ずかしさを覚えますが、まぁいいでしょう。

 

設計とGit、GitHubについて!

 

続きを読む

今日のまとめ! ~Ruby on Rails で プログラミングの勉強6~

体力の…限界…! by 千代の富士

ちょっと仕事と勉強の両立がうまく行かなくなってきた、今週。

リフレッシュ代わりの筋トレで追い込みすぎて余計に疲れてしまう始末。

 

今日は検索機能とデバックについて!

 

続きを読む