2012-11-08 29 views
11

Tôi đã xóa bộ não của mình qua điều này nhưng không thể lấy được. Tôi cảm thấy như câu trả lời có lẽ là rõ ràngĐặt tham số tìm kiếm mặc định trên Ransack cho đường ray

Những gì tôi đang cố gắng làm là như sau:

Tôi có một bộ điều khiển chỉ số trong đó liệt kê một loạt các Jobs mà tôi có thể tìm kiếm bằng Ransack. Mỗi công việc có một ngày hoàn thành hoặc có một ngày trong đó hoặc là null (chưa hoàn thành). Hiện tại, tìm kiếm hoạt động tốt. Tôi muốn làm cho nó để trang chỉ mục tải lên chỉ hiển thị công việc chưa hoàn thành, nhưng tôi cũng muốn nó hoạt động để khi ai đó chạy tìm kiếm, trả về kết quả cho cả công việc đã hoàn thành và chưa hoàn thành.

Mọi trợ giúp sẽ được đánh giá cao. Trong đoạn mã dưới đây: thực tế là tên của trường với ngày hoàn thành. Tôi cũng đang tìm kiếm trên web và nghĩ rằng có thể một cái gì đó giống như DEFAULT_SEARCH_PARAMETER = {} mà tôi có trong mô hình Công việc có thể hoạt động nhưng tôi dường như không thể làm được điều đó.

class Job < ActiveRecord::Base 
    DEFAULT_SEARCH_PARAMETER ={} 
    attr_accessible :items_attributes, :actual 
end 

def index 
    @search = Job.search(params[:q] || Job::DEFAULT_SEARCH_PARAMETER) 
    @search.build_condition 
    @results = @search.result 
    @job = @results.paginate(:per_page => 10, :page => params[:page]) 
end 

Trả lời

18

Tôi nghĩ rằng bạn chỉ có thể áp dụng bộ lọc riêng của bạn khi các thông số tìm kiếm không tồn tại:

def index 
    @search = Job.search(params[:q]) 
    @results = @search.result 
    @results = @results.where(:your_date => nil) unless params[:q] 
    @job = @results.paginate(:per_page => 10, :page => params[:page]) 
end 
+2

Cảm ơn! Điều này làm việc. Tôi sẽ bỏ phiếu này nhưng tôi không có danh tiếng. –

+0

Kiểm tra câu trả lời tốt hơn của ricsrock trước khi làm theo câu trả lời này. –

0

Vì vậy, theo mặc định, bạn muốn trang tải với hồ sơ thực tế là không. Và sau đó khi người dùng tìm kiếm bạn muốn quay trở lại cách tìm kiếm của bạn hoạt động trước đó.

Hãy dùng thử.

def index 
    @search = Job.search(params[:q] || Job::DEFAULT_SEARCH_PARAMETER) 
    @search.build_condition 
    @results = @search.result 
    if @results.nil? 
     @results=Job.find(:all, :conditions => ["actual = NULL"]) 
    end 

    @job = @results.paginate(:per_page => 10, :page => params[:page]) 
end  
+0

Tôi đã dùng thử nhưng nó không hoạt động. Cảm ơn sự giúp đỡ của bạn! –

27

muộn để đảng, nhưng nghĩ tôi muốn đề nghị một phương pháp thay thế trong trường hợp người khác đi qua điều này.

Câu trả lời ở trên hoạt động, nhưng nhược điểm của nó là mặc định không được thêm vào đối tượng tìm kiếm của Ransack, vì vậy - nếu bạn đang sử dụng biểu mẫu tìm kiếm - lựa chọn mặc định không được hiển thị trong biểu mẫu.

Cách tiếp cận sau thêm đối tượng mặc định vào đối tượng tìm kiếm và do đó sẽ xuất hiện trong biểu mẫu tìm kiếm của bạn.

def index 
    @search = Job.search(params[:q]) 
    @search.status_cont = 'Open' unless params[:q] #or whatever, must use Ransack's predicates here 
    @results = @search.result 
    @job = @results.paginate(:per_page => 10, :page => params[:page]) 
end 
+0

Đây phải là câu trả lời được chấp nhận. – johnrees

+0

Hey @ricsrock bất kỳ ý tưởng nào về cách thực hiện điều này với phạm vi thuộc danh sách trắng? – bnussey

+0

Câu trả lời hay @ricsrock. Kể từ khi sửa đổi tìm kiếm Ransack, nó dễ dàng để có mặc định bạn đã thêm hiển thị chính xác trên một phần tìm kiếm của trang được hiển thị. –

Các vấn đề liên quan