読者です 読者をやめる 読者になる 読者になる

猫の魔法

主にruby系の技術メモを記載

個人的メモ:Rails AntiPatterns (2)

Rails AntiPttrnsに関する個人的メモ。今日読んだとこまで。

CHAPTER 4 Controllers

AntiPattern: Fat Controller

  • コールバックは条件付きにすることも出来る。
  • モデル側に処理を寄せる場合はトランザクション処理をコントローラ側に持たせる必要はない。
  • _idメソッドよりもアソシエーションプロキシを使う
    • ★association proxyがよく分からなかったので調査。

Solution: Move to a Presenter

  • コールバックに持っていけばいいという話でもない。バランスが重要
  • 特に2つのモデルに対する更新処理等で、複数のモデル間にトランザクションを貼らなければならない場合、 コントローラでもモデルでもない第3の仕組みを用いてそちらに寄せるのがいい
    よくない例
class HouseControleer < ApplicationController
  def create
    @house= House.new(params[:house])
    @address = Address.new(params[:address]
    @house.address = @adress

   ActiveRecord::Base.transaction do
     @address.save!
     @house.save!
  end

  redirect_to(@address)
end
  • 記事の中ではMVPとMVCを合体させて、VC間にPを持ってくる手法が紹介されている。

    • 具体的にはPとしてActive Presenterモジュールを使っている。
    • 上の例だとhouseとaddressをpresentsに持たせたActivePresenter::Baseを継承したクラスを作成する。
      • そのクラスをnewしてsaveするようにコントローラ上は実装すれば、余計なトランザクションがいらなくなる。
        • ★今は理解しているが、この書き方だと忘れそうなので、もう少し具体例を考える。
  • AntiPattern: Bloated Sessionsの前まで読了

関連

個人的メモ:Rails AntiPatterns - 猫の魔法