TECH EXPERT 6日目

TECH::EXPERT

疲れてるのにランニングして、さらに疲労が溜まってます。
もちろん寝坊しました。本日は予定より1時間30分も遅れてしまった。
いやぁ近くに家を借りててよかった。働き方改革のつもりでリタイヤしたのに働いてた時よりハードワークしてる。そして今日は16時半に勉強は終了しました。6時間しかやってない、なんか集中力がぷっつり切れちゃったのでこれ以上パソコンとにらめっこしてても勉強にならない。能率を上げるためにはしっかり休むことも重要だよ。
(帰ってブログの更新してるんだから何やってんだかわかんないけど。今日までの日記は遅れ遅れに書いていたけど、このおかげでようやく日記が現実に追いついた。得た知識をまとめる作業も早いうちにやらないと忘れちゃう)

railsに関してはMechanize等でスクレイピングの仕方を覚えたり、だんだん楽しくなってきました。その分自分のやり方を探るのに時間を取られているのでペースが落ちています。
カリキュラムはほっといて何か作りたいなぁ。指定した会社のIRが発行されたらメール等で通知してくれるアプリを作りたい。スクレイピングの知識だけで十分作れそうな気がする。

first_or_initializeメソッド

whereメソッドと使うことで、whereで検索した条件のレコードがあればそのレコードのインスタンスを返す。なければ新しくインスタンスを作る。


user = User.where(nickname: "Tanaka").first_or_initialize
=> #<User id: nil, nickname: "Tanaka">
p user.nickname
=> "Tanaka" # "Tanaka"がnicknameカラムに代入されている

上記だけだと保存されてないので、最後に保存する。

user.save

rails generate migrationコマンド

テーブルにカラムを追加したり、削除するようなテーブルの構造を変えたいときもマイグレーションファイルを作成する。
rails generate migrationコマンドで新たなマイグレーションファイルを作成した後、rake db:migrateでカラムを追加/削除する。

bundle exec rails g migration AddRateToProducts

add_column

マイグレーションファイルのchangeメソッド内に書いてカラムを追加する。

add_column :テーブル名, :カラム名, :カラムの型

while文 unless文

処理を抜けるのにはbreakを使う

exitメソッド

プログラムの処理を強制的に終了させるメソッド。
プログラム自体を強制終了させるのでexitメソッド以降の処理は行われない。

while true do
exit  # ここでプログラムが終わる
puts "Hello World" # これは呼ばれない
end 

orderメソッドとlimitメソッドの挙動がおかしい?

@datas = モデル名.limit(num).order
=> テーブルからid順(1~num)にnum数のデータを取得。

@datas = モデル名.order('id DESC').limit(num)
=> テーブルからid降順でnum数のデータを取得。

@datas = モデル名.limit(num).order('id DESC')
=> テーブルからid降順でnum数のデータを取得。
???
意図した動作はid順でnum個取得した後に降順で並べ替えしたかった。
@datas = Product.limit(20)
@datas = @datas.order('id DESC')
と分けて記載しても全データをid降順にした上で20個参照される。
つまり後ろから20個。
@datas = Product.limit(20)
としたら前から20個なのになぜ?

特定のデータを取得して並び替えるという処理をしたかったのだが、.order.limitと.limit.orderの挙動が同じため意図した動作をしない。
解決方法としては、limitで取得するデータを絞るのではなく、where条件で取得するとうまくいく。

@datas = Data.where('id <?' , 20).order('id DESC')
=> id20未満でid20から順に降順表示。

whereメソッド

.where('id <?' , 20)

コメント