下午好,
我有一个控制器运行带有except覆盖的前置过滤器。它适用于控制器中的所有方法,保存一个。我已经从我的应用程序的另一部分复制了相关方法的代码,只是进行了我需要的更改,以使其适用于此特定区域。
以下是控制器代码的示例:
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
以下是我的routes.rb文件中有关方法的路径:
admin.search_deal 'deals/search', :controller => 'deals', :action => 'search', :method => 'get'
现在,当我尝试访问此网址时:
/admin/deals/search?search_string=test&commit=Search
它会生成以下错误消息:
Couldn't find Deal with ID=search
这段代码适用于其他几个控制器,而且我整天都在试图看看我做错了什么。我将不胜感激,谢谢。
答案 0 :(得分:1)
您的路线似乎没有正确的顺序。如果你仔细查看日志文件,你可以验证这一点,但被调用的动作可能是“显示”而不是“搜索”。
任何自定义路由都应列在默认路由之上,或者更好,您应该完全删除默认路径。
在log / development.log中查找这样的行:
Processing Admin::DealsController#show
如果您使用rake routes
列出路线,请确保在任何通用路线之前列出您的自定义search_deal路线。
您可能也想使用资源丰富的路线:
map.namespace :admin do |admin|
admin.resources :deals, :collection => { :search => :get }
end