with_scopeをprotectedにするということは

こんな感じになるということなんですかね?という試行錯誤。

悪くないとは思うんですが、慣れるまでは大変そう。
なんていいながら実はけっこうクラス内でwith_scopeするのは好きなんですけどね。

class Blog < ActiveRecord::Base
  has_many :entries
end
class Entry < ActiveRecord::Base
  belongs_to :blog
  validates_presence_of :title, :body, :null => false

  class << self
    def find_with_deleted_flag_skip(*args)
      with_scope(:find=>{:conditions=>{:deleted=>false}}) do
        find_without_deleted_flag_skip(*args)
      end
    end
    alias_method_chain :find, :deleted_flag_skip
  end
end
続きを読む

AC::Resourceとfindのレシーバの話。

上記の続き。
findメソッドの中に必須のスコーピングをまとめられる、というところから、するとfindのレシーバ次第でコンテキストに沿ったスコープを生成できるのではないか、と考えました。ちょっとだけ北欧、でもないか。

resouceの話と絡めるとこんな感じに書けそう。

class EntriesController < ApplicationController

  # recognized as below
  #  /entries/:id
  #  /blogs/:blog_id/entries/:id
  def show
    context = params[:blog_id].blank? ? Entry : Blog.find(params[:blog_id])
    @entry = context.find(params[:id])
    respond_to{|format| format.html }
  end
end
続きを読む