Rails, before_filter でアクション前のチェックを行う

Ruby on Rails でアイテムをデータベースから削除する際に、そのアイテムのデータを利用している関連項目が存在するかを事前にチェックして、不用意に削除してしまわないようにする。

class ItemsController < ApplicationController
  before_filter :account_has_item?, :only => :destroy

  # 省略...

  private

  def account_has_item?
    @item = Item.find(params[:id])
    @accounts = Account.find(:all, :conditions => { :item_id => params[:id] })
    if @accounts.length > 0
      flash[:warning] = "費目(#{@item.name})を設定している項目が(#{@accounts.length}個)存在します"
      redirect_to :action => :index
    end
  end
end
Railsレシピブック 183の技
高橋 征義 諸橋 恭介
ソフトバンククリエイティブ
売り上げランキング: 90101
«
»