presentのメソッドで真偽判定

今回の問題は、商品がなかったらという条件分岐を書きました。その時に使ったのが

<% if @items.blank? %>

でした!

他にも色々使えそうなのがあったので まとめてみました😁!!

 

⭐️nil?メソッド

変数.nil?

このメソッドでtrueが返ってくる時はレシーバーである変数そのものが存在しない時ということになる。

⭐️empty?メソッド

変数.empty?

このメソッドでtrueが返ってくる時はレシーバーである変数に値が入っていない時ということになる。

例えばその変数がインスタンス変数であればそのインスタンス変数自体は存在するが、そのインスタンス変数に値が何も入っていない時などは、empty?メソッド使って検索することとなる。

 

⭐️blank?メソッド

変数.blank?

このメソッドでtrueが返ってくる時はレシーバである変数そのものが存在しないか、変数に値が入っていない時とということになる。

つまり、上記のnil?メソッドとempty?メソッドの両方の機能を足したメソッドとなります。

 

⭐️present?メソッド

変数.present?

present?メソッドはレシーバーである変数に値が入っていればtrueを返し値が入ってなくまたレシーバーである変数そのものが存在しない時は、falseを返します。

上記のメソッドのblank?メソッドの逆となる。

ActionView::Template::Error (undefined method `errors' for nil:NilClass):について

⭐️エラーがでた経緯

ログイン画面から出品投稿画面に遷移する時

 

⭐️エラー画面

AActionView::Template::Error (undefined method `errors' for nil:NilClass):
1: <% if model.errors.any? %>
2: <div class="error-alert">
3: <ul>
4: <% model.errors.full_messages.each do |message| %>

app/views/shared/_error_messages.html.erb:1
app/views/items/new.html.erb:9
app/views/items/new.html.erb:8

 

⭐️チェック箇所

app/views/shared/_error_messages.html.erb:1
app/views/items/new.html.erb:9
app/views/items/new.html.erb:8

 

⭐️解決ポイント

情報の渡し忘れ

情報がどのように渡されていくのかイメージする

 

⭐️解決コード

new.html.erb:8

<%= form_with local: true do |f| %>を、

<%= form_with  model:@item local: true do |f| %>にする

 

⭐️解決経緯 

今回エラーがでたのはバリデーションによって保存できない場合、

エラーハンドリングをおこないます。

そのためエラーが付与されている情報を渡してあげる。

 

 

 

カラムの種類

カラム一覧表

・primary_key:プライマリキー

・string:文字列(1〜255文字)

・text:長い文字列(1〜4294967296文字)

・integer:整数(4バイト)(active_hashで実装予定の場合にも、使う)

・bigint:整数(8バイト)

・float:浮動小数

・decimal:精度の高い少数

・numeric:数値

・datetime:日時

・timestamp:更新時間

・time:時間

・date:日付 (誕生日、年、月、日まとめて取得) t.date :birthday,  null: false

・binary:バイナリーデータ

boolean:真偽値

 

 

今回学んだこと

・string:文字列(1〜255文字)

主に名前やアドレスなどのカラムに書いていたので、短い文数の時に使うと思っていたら、255文字対応で結構長い文数対応しているんだなと思いました😁

・integer:整数(4バイト)

active_hashで実装予定の場合に使えることを知りました。

・date:日付 (誕生日、年、月、日まとめて取得)

実装参考のフォーマットが年、月、日でわかれていたので、

別々に記述しましたがまとめてdateで取得できると知りました😁

 

次回はばっちりスムーズに取り組めそうです!!

 

deviseの導入直後のエラー

devise導入して、rails db:migrateしたらすぐにエラーが出ました😭

 

NoMethodError: undefined method `devise' for User (call 'User.connection' to establish a connection

訳:deviceメソッドが見つからないよ~

 

ターミナルで調べてみると…

rails g devise:installをしていない!!

 

対処方法

①routes.rbにあるdevise_for :usersというコードを削除する

rake db:rollbackマイグレーションファイルをロールバックする。

③userテーブルを作ったときのマイグレーションファイルを削除する。

rails d model userを行いuserモデルを削除する。

これらの作業でdeviseをインストールする前の状態に戻ることができました。

以上の作業が終わったら、rails g devise:installからコマンドを実行していけば正常に動いた!!

 

正しい手順

① gem 'davise' 記述する

② bundle install

③ rails s

④ rails g devise:install

⑤ rails g devise user

⑥    マイグレーションファイル記述

⑦  rails db:migrate

⑧  rails db:migrate:status

 

次は間違えないように気をつけよう😁