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

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

オリジナルアプリ作成記 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でエラーメッセージをいかにして表示するか。
レイアウト崩れをどう直すかという点。
明日改めてまとめたいと思う。

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