before_filter кроме переопределения не работает - PullRequest
1 голос
/ 15 июля 2010

Добрый день всем,

У меня есть контроллер, на котором запущен фильтр before с переопределением кроме.Он отлично работает для всех методов в контроллере, кроме одного.Я скопировал код для рассматриваемого метода из другой части моего приложения, просто внося необходимые изменения, чтобы он работал для этой конкретной области.

Вот пример кода контроллера:

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

И вот маршрут в моем файле rout.rb для рассматриваемого метода:

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

Теперь, когда я пытаюсь посетить этот URL:

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

Он генерирует следующее сообщение об ошибке:

Couldn't find Deal with ID=search

Этот код работает на нескольких других контроллерах, и я весь день бился головой об стену, пытаясь понять, что я делаю неправильно.Буду признателен за любую помощь, спасибо.

1 Ответ

1 голос
/ 15 июля 2010

Похоже, что ваши маршруты не в правильном порядке. Если вы посмотрите более внимательно на файл журнала, вы сможете проверить это, но вызываемое действие, вероятно, «show», а не «search».

Любые пользовательские маршруты должны быть перечислены выше стандартных, или, что лучше, вы должны полностью удалить значения по умолчанию.

Найдите строку, подобную этой, в вашем log / development.log:

Processing Admin::DealsController#show

Если вы перечислили свои маршруты с rake routes, убедитесь, что ваш собственный маршрут search_deal указан перед любыми общими маршрутами.

Возможно, вы также захотите использовать находчивые маршруты:

map.namespace :admin do |admin|
  admin.resources :deals, :collection => { :search => :get }
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...