2015-12-21 77 views
2

我收到錯誤:錯誤:「模板丟失」

Template is missing 


Missing template customers/search, application/search with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :jbuilder]}. 

當我試圖做一個搜索欄,通過我現有的客戶數據庫中搜索這正在發生。我認爲這是因爲我正在使用部分'_search.html.erb',但它需要是部分的,我不知道如何解決這個問題。

這裏是我的客戶\ _search.html.erb:

<%= form_tag search_customers_path do %> 
    <input class = "searchbar" id ="custsearch" name=query" placeholder = "find colleague" type="text"> 
<% end %> 

它正在與渲染(在事件\ new.html.erb)的HTML:

<div class = "searchbar"> 
     <%= render partial: 'customers/search', :object => @customers, locals:{} %> 
     </div> 

這裏是我的客戶控制器 '搜索' 的方法:

def search 
    @q = "%#{params[:query]}%" 

    @customers = Customer.where("first_name LIKE ? or last_name LIKE ? ",@q,@q) 

    render :layout => false 
    end 

,這裏是我的路線文件:

root 'pages#home' 
    get '/main' => 'pages#main' 
    get '/signup' => 'customers#new' 
    resources :customers do 
    collection do 
     get 'search' 
    end 
    end 


    get '/compose' => 'events#new' 

    resources :events 

我甚至不確定這個搜索是否可行,但這是實現它的第一個障礙。請幫忙!

感謝

+0

'search' action需要一個'search.html.erb'模板(這個模板與部分_search.html.erb不同) – AbM

+0

@AbM我知道這一點,但我不知道如何解決這個。我需要_search.html.erb,以便我可以在另一個html文件中使用它? –

+0

難道你不能只包裝部分(_search.html.erb)在全視圖(search.html.erb)?認爲它會解決你的問題:你可以保持局部並保持渲染,就像你現在。 – azazeal

回答

0

你的搜索行動尋找customers/search.html.erb,但你沒有任何。嘗試創建customers文件夾名稱search.html.erb一個新的文件,並粘貼下面的代碼有:

<div class = "searchbar"> 
    <%= render partial: 'customers/search', :object => @customers, locals:{} %> 
</div> 

也從search行動刪除render :layout => false。如果您以html格式發送請求。

+0

好了,我現在得到的錯誤: 路由錯誤 沒有路由匹配[POST] 「/ customers/search」 –

+0

當您收到此問題時。在提交或其他東西。 –

+0

這是發生在提交 –

0

你只需要修改你控制器類似

def search 
    @q = "%#{params[:query]}%" 

    @customers = Customer.where("first_name LIKE ? or last_name LIKE ? ",@q,@q) 
    render partial: "customers/search", locals: { customers: @customers }, :layout => false 
    end 

在通知客戶/ _search變化

#customers/_search.html.erb 
<%= form_tag search_customers_path, method: :get do %> 
    <input class = "searchbar" id ="custsearch" name=query" placeholder = "find colleague" type="text"> 
+0

OK,提交搜索時,現在我收到此錯誤: 路由錯誤 無路由匹配[POST]「/ customers/search」 –

+0

@SCraig這是因爲在'routes.rb'文件中,你已經將'search'動作定義爲'get'而不是'post'。所以你有兩個選項,可以添加'post:get '在集合內的路由文件或'customers \ _search.html.erb'內的路由文件中將'form_tag'更改爲像'form_tag search_customers_path,method:get'那樣發佈方法。 – punitcse

0

@punitcse的答案是正確的:

def create 
    # this will be looking for customers/search.html.erb 
    # you have to explicitly define it: 

    render partial: "search", layout: false 
end 

這個s應該解決錯誤。


調用視圖的部分是相當正常:

<%= render partial: "customers/search", object: @object %> 

問題看起來像是由您create行動,這可以糾正解決它引起的。

+0

當你說創建你的意思是我的客戶創建? –