2011-02-01 33 views
6

Tôi đang sử dụng https://github.com/crowdint/rails3-jquery-autocomplete và có vẻ như nó đang hoạt động. Vấn đề duy nhất là cho phép nói rằng tôi có một trường thực hiện tự động hoàn thành trên tất cả các tiêu đề bài viết, nhưng tôi muốn nó chỉ hiển thị tiêu đề của bài viết mà người dùng đã tạo.Phạm vi kết quả cho rails3 plugin jquery autocomplete

Có cách nào để làm điều gì đó như thế này không? I E. một find_by hoặc một cái gì đó?

Cảm ơn!

-Elliot

EDIT

nó nói trong tài liệu:

If you want to display a different version of what you're looking for, you can use the :display_value option. 

This options receives a method name as the parameter, and that method will be called on the instance when displaying the results. 

class Brand < ActiveRecord::Base 
    def funky_method 
    "#{self.name}.camelize" 
    end 
end 


class ProductsController < Admin::BaseController 
    autocomplete :brand, :name, :display_value => :funky_method 
end 
In the example above, you will search by name, but the autocomplete list will display the result of funky_method 

tôi cảm thấy như thế này có thể được sử dụng để làm những gì tôi đang cố gắng để hoàn thành xảy ra, nhưng tôi không biết bắt đầu từ đâu?

Trả lời

2

Bạn nên ghi đè lên các phương pháp get_item, ví dụ như trong những trường hợp tôi đang lọc các danh sách người dùng phải xem xét đến chỉ mới nhất:

class UsersController < ApplicationController 
    autocomplete :user, :email, :full => true 

    def index 
     @users = User.all 
    end 

    def get_items(parameters) 
     [User.last] 
    end 

Tôi nghĩ rằng một trong những cam kết cuối cùng, thay đổi (#get_items) tên phương pháp. Kiểm tra phiên bản của tệp autocomplete.rb của bạn.

Kiểm tra tại đây: https://github.com/crowdint/rails3-jquery-autocomplete/commit/b3c18ac92ced2932ac6e9d17237343b512d2144d#L1R84.

+0

Xin chào ClaudioA, vì vậy công trình này ở một mức độ: def get_items (tham số) Post.where (: user_id => current_user.id) kết thúc nhưng tự động hoàn thành không còn hoạt động nữa , nó chỉ hiển thị một danh sách các mục đáp ứng những nhu cầu đó? – Elliot

+0

bạn vẫn có thể sử dụng phương thức get_items gốc bằng cách gọi siêu, chi tiết hơn về câu trả lời – deb

1

Mặc dù tôi chưa thử nghiệm cá nhân, tôi nghĩ phương pháp phạm vi thông thường trong đường ray3 sẽ hoạt động. Như sau khi tất cả phạm vi cũng là một phương pháp tương tự như "funky_method"

viết một phạm vi

trong mô hình của bạn

phạm vi: funky_method, lambda {| param1 | : conditions => {: Cột = param1}}

và trong điều khiển của bạn

autocomplete: thương hiệu,: tên,: display_value =>: funky_method

nên làm việc, hãy thử và xem ..

cổ vũ

Sameera

+0

Hi Sameera, tôi đã cố gắng: phạm vi: funky_method, lambda { nơi ("post.user_id như thế nào?", Current_user.id) } Nhưng nó không có vẻ làm việc ...? – Elliot

+0

Tôi đã không thể có được phạm vi để làm việc cho đá quý này, thật đáng buồn. Tôi đã phải sửa đổi get_autocomplete_method trực tiếp. Tin tốt là bạn có thể mod phương thức get_autocomplete_items bằng cách sử dụng các truy vấn chọn của Rails hoặc SQL thẳng lên. Trong ví dụ này, tôi đang tìm kiếm một tên trùng khớp và họ. https://gist.github.com/bb3b54f2ec793cf00fd0 – slant

7

Bạn có thể ghi đè lên get_autocomplete_items, nhưng trước tiên sử dụng siêu gọi gốcget_autocomplete_items phương pháp, và sau đó lọc kết quả theo current_user.id (hoặc post.user.id nếu chủ sở hữu của bài không phải là người dùng hiện tại)

def get_autocomplete_items(parameters) 
    items = super(parameters) 
    items = items.where(:user_id => current_user.id) 
    end 

Bằng cách này bạn vẫn có thể chọn tất cả các tùy chọn khác đi kèm với đá quý. Điều này nên được thực hiện trong bộ điều khiển của bạn bằng cách này.

Câu trả lời khác đề xuất tùy chọn :scope.Tôi nhìn vào đó, nhưng nó không phải là cách để đi trong trường hợp này, bạn không muốn thêm "current_user" và những thứ như thế vào các mô hình của bạn.

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