Определение результатов для плагина racom3 jquery для автозаполнения - PullRequest
6 голосов
/ 01 февраля 2011

Я использую https://github.com/crowdint/rails3-jquery-autocomplete и, похоже, работает. Единственная проблема - скажем, у меня есть поле, выполняющее автозаполнение всех заголовков сообщений, но я хочу, чтобы оно отображало только заголовки сообщений, созданных пользователем.

Есть ли способ сделать что-то подобное? То есть find_by или что-то?

Спасибо!

-Elliot

EDIT

в документации сказано:

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

Я чувствую, что это можно использовать, чтобы добиться того, чего я пытаюсь достичь, но я понятия не имею, с чего начать?

Ответы [ 3 ]

7 голосов
/ 31 августа 2011

Вы можете переопределить get_autocomplete_items, но сначала используйте super , чтобы вызвать оригинальный get_autocomplete_items метод, а затем отфильтруйте результаты по current_user.id (или post.user.id, если владелец поста не является текущим пользователем)

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

Таким образом, вы можете использовать все остальные опции, которые поставляются с самоцветом.Это должно быть сделано в вашем контроллере, кстати.

В другом ответе предложена опция :scope.Я изучил это, но в данном случае это не тот путь, вы не хотите добавлять «current_user» и тому подобное в свои модели.

2 голосов
/ 01 февраля 2011

Вы должны перезаписать метод get_item , например, в этом случае я фильтрую список пользователей, чтобы рассмотреть только последний:

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

    def index
        @users = User.all
    end

    def get_items(parameters)
        [User.last]
    end

Я думаю, что одиниз последних коммитов изменил имя метода (#get_items).Проверьте версию файла autocomplete.rb .

Проверьте это здесь: https://github.com/crowdint/rails3-jquery-autocomplete/commit/b3c18ac92ced2932ac6e9d17237343b512d2144d#L1R84.

1 голос
/ 01 февраля 2011

Несмотря на то, что я лично не проверял, я думаю, что нормальный метод видимости в rails3 должен работать.Поскольку в конце концов область видимости также является методом, аналогичным «funky_method»

, напишите область действия

в своей модели

scope: funky_method, lambda {| param1 |: условие => {: column = param1}}

и в вашем контроллере

автозаполнение: бренд,: имя,: display_value =>: funky_method

должно работать, попробуйтеи смотри ..

ура

Самера

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...