2013-03-14 44 views
7

Tôi mới sử dụng Ruby on Rails và tôi đang tạo trang web đầu tiên của mình. Tôi có mô hình người dùng với 3 cột: firstname, lastnameemail. Tôi sử dụng lệnh ransack để tạo một công cụ tìm kiếm và tôi muốn có một trường tìm kiếm sẽ đi qua từng cột và hiển thị kết quả.Ransack, tìm kiếm nhiều cột, một trường, đường ray 3

Tôi đã thực hiện một user_controller.rb tìm kiếm như thế này:

@q = User.search(params[:q]) 
@users = @q.result(:distinct => true) 

Và tôi User \ index.html.erb trông như thế này:

<%= search_form_for @search do |f| %> 
    <div class="field"> 
    <%= f.label :firstname_cont , "Firstname" %> 
    <%= f.text_field :firstname_cont %> 
    <%= f.label :lastname_cont , "Lastname" %> 
    <%= f.text_field :lastname_cont %> 
    <%= f.label :email_cont , "Email" %> 
    <%= f.text_field :email_cont %> 
    </div> 
    <div class="actions"><%= f.submit "Search" %></div> 
<% end %> 

Cho tôi 3 tìm kiếm các lĩnh vực, nhưng tôi chỉ muốn một trong đó đi qua firstname, lastname và email.

Chỉnh sửa 1: Sau khi thử nghiệm một số chi tiết khác, tôi phát hiện ra rằng trường tìm kiếm không thể xử lý cả tên và họ hoặc bất kỳ khoảng trắng nào. Tôi đã đọc rằng có thể tạo một helper_method như thế này: Searching multiple fields with Ransack

Và khi tôi nhận được kết quả tìm kiếm, tôi được đưa vào chỉ mục mô hình của tôi, vv: người dùng/chỉ mục. Tôi có thể thay đổi điều này ở đâu?

Nhưng không có gì về cách sử dụng nó trong chế độ xem. Tại sao nó khó khăn như vậy để chỉ whrigt, đây là những gì bạn làm: trong Controller làm điều này -> trong mô hình làm điều này -> trong xem làm điều này -> Và không quên sửa chữa các tuyến đường như thế này ->

Trả lời

16

Đầu tiên tất cả, trước khi yêu cầu cố gắng tìm kiếm một chút thông qua tài liệu đá quý và googling một chút^_ ^.

Người đầu tiên đề cập là trang github: https://github.com/ernie/ransack

Nhìn vào trang bản demo của Ransack đây: http://ransack-demo.herokuapp.com/ bạn sẽ thấy trường đầu tiên làm những gì bạn muốn (tìm kiếm trong cả lastname và firsname) và có một cái nhìn vào mã nguồn của trang, bạn sẽ thấy dòng này

<input id="q_first_name_or_last_name_cont" name="q[first_name_or_last_name_cont]" size="30" type="text" /> 

mang đến cho bạn một ý tưởng về đúng vị sử dụng, bạn cũng có thể có một danh sách của họ ở đây: https://github.com/ernie/ransack/blob/master/lib/ransack/constants.rb (luôn trong tài liệu đá quý trên github).

Trên cơ sở đó bạn có thể làm một cái gì đó như thế theo quan điểm của bạn

<%= f.text_field :lastname_or_first_name_or_email_cont, :placeholder => 'full name or email contains' %> 

mà tạo ra một truy vấn 'OR tình trạng', như bạn có thể nhìn thấy trong trang demo nữa (hợp truy vấn tạo được dispayed như một truy vấn SQL truyền thống)

Hope this helps

Cheers

+1

Nice, mà làm việc như một nét duyên dáng! Tôi đã googeld mình mù, nhưng tôi thấy bây giờ rằng câu trả lời là ngay trước mặt tôi. Cám ơn! –

+1

Rất vui được giúp đỡ khi tôi có thể^_^ – phron

+0

Tôi có thể yêu cầu bạn trợ giúp thêm không? Tôi đã nhận thấy rằng khoảng trắng, hoặc tìm kiếm với hơn 1 từ sẽ làm cho phương pháp này thất bại. Giống như nếu firstname là Foo, và họ là Bar, và tôi tìm kiếm thanh Foo, nó sẽ thất bại .. Có thể xây dựng một: def set_full_name .... kết thúc, và sau đó gọi nó trong xem?và làm thế nào để bạn gọi nó trong quan điểm? với helper_method? i dident quản lý để làm điều này .. Và một điều cuối cùng, nếu tôi có tìm kiếm bất kỳ nơi nào khác, kết quả của tôi sẽ allways ném tôi vào mô hình - chỉ mục. Tại sao điều này? –

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