泉式部日記

夢よりもはかなき世の中を明かし暮らす高専生

【Rails】最近学んだこと振り返り

最近お仕事でRuby on Railsを触っており, そこで苦戦したところをメモすることにした.
「ここはおかしい」「ここはこの方がいい」など教えていただけたら嬉しいです

bulmaでselectクラスを使うとき

お仕事ではView部分をslim + bulmaで書いている.

フォーム画面を作成しているとき, date_selectみたいなselectフォームを複数作ってくれるものを, bulmaselectクラスで包むとselect項目が縦に並んでしまう.
横並びにするためには中身をfield is-horizontalでもう一度包む必要がある.

= form_for :hoge do |f|
  .field
    .select
      .field.is-horizontal
        = f.date_select

これを知らなくて1時間ぐらい至るところにis-horizontalをつけまくってた...

複数のレコードを保存したい

1つのフォームで複数のレコードを保存するとき, form_forを使うとparamsとかが被って当然保存できない.
ということでform_tagを使って書いた.

= form_tag 'hoge_path', method: post do
  .field
    .input
      = text_field_tag 'fuga[]', @hoge.fuga

/ params[:fuga][i] でi番目のparamsを参照可能

保存時にはtransactionを使って失敗時にロールバックできるようにする.

Hoge.transaction do
  @hoges.each_with_index do |hoge, i|
    Hoge.new(fuga: params[:fuga][i])
    hoge.save!
  end
end

一気に保存できたらtransactionする必要もなさそうだけど (やり方はわからない)

ループ内でDBへアクセスしまくっていた

普通のことだが, DBへのアクセスは少なく済ませようという話

ids = [1, 2, 3]

# Before:
ids.each do |id|
  Hoge.find(id)
  # なんか処理
end

# After:
Hoge.where(id: ids)
# なんか処理

最後に

Railsは入門書を読んだぐらいだったので, 実際の業務を通して自分の穴を補完できるのはやっぱりいいですね.
基本的なところで詰まってるからもっと勉強しないと...