2014-09-14 5 views
1

그래서 게시 요청을하고 검색 결과를 볼 수 있지만 새로 고침을 클릭하면 누락 된 요청 요청 오류가 발생합니다.검색 결과를 얻는 방법

본질적으로 검색 결과를 얻을 수 없지만 검색 결과를 POST 할 수 있습니다. 내가 어떻게 이럴 수 있니?

routes.rb :

resources :statistics, except: :show do 
     collection do 
     post :search, as: 'statistics_search' 
     end 
    end 

오류 :

Routing Error 
No route matches [GET] "/admin/statistics/search" 

컨트롤러 코드 (statistics_controller.rb)

class SaasAdmin::StatisticsController < SaasAdminController 

    inherit_resources 

    def index 

    end 

    def search 
    @search = Search.new(params[:search]) 

    @impressions = Impression.where("impressionable_type = 'Clip' AND impressionable_id = ? AND impressions.created_at BETWEEN ? AND ?", @search.clip, @search.start_date, @search.end_date) 
    render 'index' 
    end 

end 

감사합니다!

업데이트 오류

NoMethodError in SaasAdmin::StatisticsController#search 
undefined method `each' for nil:NilClass 



    def initialize(params = {}) 
    params.each do |k, v| < --- this is what it's referring to. 
     send("#{k}=", v) 
    end 
    end 

search.rb

class Search < ActiveModel::Name 
    attr_accessor :clip, :start_date, :end_date 
    extend ActiveModel::Naming 
    include ActiveModel::Conversion 

    def initialize(params = {}) 
    params.each do |k, v| 
     send("#{k}=", v) 
    end 
    end 

    def start_date=(date) 
     @start_date = Date.parse(date) 
    end 

    def end_date=(date) 
    @end_date = Date.parse(date) 
    end 

    def persisted? 
    false 
    end 
end 
+0

를 업데이트 할 수 있습니다하는 good Railscast about how to implement this functionality here

를 참조 오류 MSG와도 오류 ... 업데이트 \ –

+0

을 포함 할 수 있습니다. –

+0

컨트롤러 코드를 게시 할 수 있습니까? –

답변

1

우리가 만든 여기 검색 기능 "GET"http://firststopcosmeticshop.co.uk


가 GET

당신은 다음을 수행 할 수 있습니다 :

#config/routes.rb 
resources :statistics, except: :show do 
    match :search, as: 'statistics_search', on: :collection, via: [:get, :post] 
end 

모델

Search 모델을 어떻게 사용하고 있는지 고려해야합니다.

개체에 특성을 채우는 것 이상을 수행하는 별도의 Search 모델이 왜 포함되었는지 이해할 수 없습니까? 확실하게 검색 매개 변수를 class method으로 전달하면 보려는 데이터에서 형성된 객체를 다시 가져올 수 있습니다.

:

#app/models/impression.rb 
class Impression < ActiveRecord::Base 
    def self.search clip, start_date, end_date 
     where("impressionable_type = 'Clip' AND impressionable_id = ? AND impressions.created_at BETWEEN ? AND ?", clip, start_date, end_date) 
    end 
end 

#app/controllers/sass_admin/statistics_controller.rb 
class SaasAdmin::StatisticsController < SaasAdminController 
    inherit_resources 

    def search 
    @impressions = Impression.search params[:clip], params[:start_date], params[:end_date] 
    render 'index' 
    end 

end 

당신은이 기능을 지원하는 form_tag을 사용할 수 있습니다 :

당신은 우리가이 설정을 사용 this Railscast

enter image description here

에서이의 더 나은 전망을 얻을 것이다

#app/views/your_view.html.erb 
<%= form_tag statistics_search_path do %> 
    <%= text_field_tag :clip %> 
    <%= text_field_tag :start_date %> 
    <%= text_field_tag :end_date %> 
    <%= submit_tag %> 
<% end %> 

-

물론 타사

, 위의 유일한 제대로 당신이 같은 단일 모델 "검색"에 대한 작동합니다.

여러 모델로 확장하려는 경우 "색인"검색 플러그인 중 하나를 사용하는 것이 좋습니다. 이 작업은 &에 명시된 데이터를 가져 와서 색인 생성 한 데이터를 검색 할 수있는 Google 색인 생성 도구입니다.

당신은 당신이에 대한 자세한 정보를 원한다면 나는 기꺼이 대답

+0

감사합니다 Rich, 그러나 이것으로 날짜 범위는 더 이상 start_date, : end_date 텍스트 필드에서 선택할 수 없습니다. 이전 방법으로 텍스트 필드를 클릭하면 JQuery 날짜 선택이 나타납니다. 우리는 여전히 그 funcitonality를 통합 할 수 있습니까? –

0

레일 경로가 모두 경로 요청 방법을 일치 찾기 위해 노력할 것입니다. 즉, POST /pathGET /path입니다.

collection do 
    match :search, as: 'statistics_search', via: [:get, :post] 
end 

상세 정보 : http://guides.rubyonrails.org/routing.html#http-verb-constraints

UPDATE : 위의 정보가 정확하지만, 그것은 작동하지 않습니다 귀하의 경우에 당신은 어떤 요청 방법을 허용하는 match 방법 루트하거나 사용자 모두 getpost을 정의해야 귀하의 코드와 함께 POST 요청의 매개 변수가 URL이 아닌 본문에 전송되기 때문입니다. http는 상태 비 저장 프로토콜이라는 것을 기억하십시오. 해결책은 get :search을 경로에두고 GET 메소드로 양식을 보내므로 매개 변수가 URL의 일부로 전송됩니다.

+0

고마워 루카스, 내가 이것에서 오류가있어, 지금 내가 위의 오류가 새로 고침을 클릭하면. 우리는 확실히 지금 훨씬 더 가깝습니다. –

+0

내 대답을 업데이트했습니다. – Lucas

+0

아, 나는 c - 그래서 양식 URL은 어떻게되어야합니까? 현재와 ​​같습니다 : <% = form_for Search.new, url : statistics_search_saas_admin_statistics_path do | f | %> –

관련 문제