views:

25

answers:

1

Good afternoon all,

I've got a controller running a before filter with an except override. It works fine for all the methods in the controller, save one. I've copied the code for the method in question from another part of my app, just making the changes I need to get it working for this particular area.

Here is an example of the controller code:

class Admin::DealsController < ApplicationController
  before_filter :populate, :except => [:index, :create, :new, :search]

  # GET /deals
  def index
    @deals = Deal.paginate(:page => params[:page], :per_page => PAGESIZE, :order => 'start_time DESC')
    @page_subtitle = "Deals"
  end

  def search
    @searchString = params[:search_string]
    @deals = Deal.paginate(:page => params[:page], :per_page => PAGESIZE, :conditions => "subject LIKE '%#{@searchString}%'")
    @page_subtitle = "Deal Search Results"
    render 'index'
  end

  protected
    def populate
      @deal = Deal.find(params[:id])
    end
end

And here is the route in my routes.rb file for the method in question:

admin.search_deal 'deals/search', :controller => 'deals', :action => 'search', :method => 'get'

Now, when I attempt to visit this URL:

/admin/deals/search?search_string=test&commit=Search

It generates the following error message:

Couldn't find Deal with ID=search

This code works on several other controllers, and I've been beating my head against the wall all day trying to see what I'm doing wrong. I would appreciate any help, thank you.

+1  A: 

It would appear that your routes are not in the correct order. If you look more closely at the log file you may be able to verify this, but the action being called is probably "show" and not "search".

Any custom routes should be listed above the default ones, or better, you should remove the defaults entirely.

Look for a line like this in your log/development.log:

Processing Admin::DealsController#show

If you list your routes with rake routes make sure that your custom search_deal route is listed before any generic routes.

You might want to use resourceful routes, too:

map.namespace :admin do |admin|
  admin.resources :deals, :collection => { :search => :get }
end
tadman
Thank you! This was exactly the problem.
Kevin Whitaker