A0317a752d14a9ba201370824cea5815

I can't figure out any nice solution for ActiveRecord's find based on 2 conditions. Can anyone help me with some advice how to improve it?
Thanks in advance.

if @chosen_campaign.network.nil?
  case params[:type]
  when "moderated"
    @websites = Website.moderated.find(:all, :order => "name").paginate(
      :per_page => 10,
      :page => params[:page]
    )
  when "unmoderated"
    @websites = Website.unmoderated.find(:all, :order => "name").paginate(
      :per_page => 10,
      :page => params[:page]
    )
  when "all"
    @websites = Website.find(:all, :order => "name").paginate(
      :per_page => 10,
      :page => params[:page]
    )
  end
else
  case params[:type]
  when "moderated"
    @websites = @chosen_campaign.network.websites.moderated.find(:all).paginate(
      :per_page => 10,
      :page => params[:page]
    )
  when "unmoderated"
    @websites = @chosen_campaign.network.websites.unmoderated.find(:all).paginate(
      :per_page => 10,
      :page => params[:page]
    )
  when "all"
    @websites = @chosen_campaign.network.websites.find(:all).paginate(
      :per_page => 10,
      :page => params[:page]
    )
  end
end

Refactorings

No refactoring yet !

A8d3f35baafdaea851914b17dae9e1fc

Adam

April 16, 2009, April 16, 2009 16:16, permalink

No rating. Login to rate!
class WebsitesController < ApplicationController
  def index
    scoped_website_class.of_type(params[:type]).find(:all, :order => 'name').
                         paginate(:per_page => 10, :page => params[:page])
  end
  
  private
    def scoped_website_class
      @chosen_campaign.network ? @chosen_campaign.network.websites : Website
    end
end

Your refactoring





Format Copy from initial code

or Cancel