LoginSignup
0
0

More than 5 years have passed since last update.

【備忘録】RoRで無駄な条件を書かずにステータス更新

Posted at

無駄なコードは本当にないですか...?

RoRをさわり始めて9ヶ月ほど経ちました。未だによくわからないことがいっぱいで、自分がプロダクトのあちこちに無駄なコードをばらまいてしまっていることに最近やっと気付き始めた模様です。ちょっとしたことだとすぐ忘れてまた同じことを繰り返してしまうかもしれないので、気づいたことはメモっておこうと思います。

今回の「無駄」

controllerにてstatusを変更するとき
「もしHogeがbarじゃなかったらbarに変更」
「もしHogeがbarじゃなかったら」が無駄!

環境

Ruby: 2.2.3
Rails: 4.2.0
gem enum_help: 0.0.16, 0.0.15

思うがままに書いてみる

とりあえず、何も考えずに「もしHogeがbarじゃなかったらbarに変更」できるように書きました。

model↓

app/models/hoge.rb
# == Schema Information
# Table name: hoges
#  id          :integer   not null, primary key
#  status      :integer   default(0), not null
#  created_at  :datetime  not null
#  updated_at  :datetime  not null

class Hoge < ActiveRecord::Base
  enum status: %i(foo bar)
end

controller↓

app/controllers/hoges_controller.rb
class HogesController < ApplicationController

  #patch method
  def bar
    @hoge = Hoge.find(params[:id])
    @hoge.bar! unless @hoge.bar?
  e =>
    redirect_to fugas_path, alert 'bar error'
  end
end

どこが無駄??

...冗長なのはどこかというと、まさに冒頭で書いた通りで
unless @hoge.bar?
の部分。自分では全く気付かずただ「動くしロジック通りに表記してるから大丈夫でしょ」っていう感覚でプルリク出したら先輩から指摘されたポイントです。
「いや、でも、これ書かないと既にbarになってるものも更新しちゃって無駄なんでないの??」と思ったアナタ。僕と同じですね〜w(失礼)
Railsが発行したSQLを確認してみると...なんと、上の条件式を書いても書かなくても、SELECTが走って「hogeの中の、barじゃないヤツ」を取ってきてくれたのでした!ほぉ〜。なるほど〜。Rails優秀。しゅごい。

結論

「もしHogeがbarじゃなかったらbarに変更」という動作を実装するとき、条件式は書かなくてもいいということがわかりました。心もコードもちょっとスッキリしましたね!d( ̄  ̄)グッ
...まぁでも「もしHogeがfooだったらbarに変更」とかだとちゃんと条件書かなきゃいけないので、無駄が生じることって実はあんまりないのかもしれませんが...。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0