Я проверил драгоценный камень, и он не выглядит легким или, по крайней мере, немного хитрым.Существует недокументированная опция where
, которую можно использовать, когда вы объявляете функцию автозаполнения на контроллере, но я думаю, что она оценивается в тот момент, и вы ее определяете, я не думаю, что она может быть определена динамически.
Я могу думать о трех вариантах:
1) есть опция "scopes", так что вы можете определить область действия для модели, которая делает where(user_id: <the current user's id>)
, но вам нужен способ получить идентификатор текущего пользователяиз модели (лично мне это не нравится, это нарушает идею MVC), как это Доступ к current_user в модели
Плюсы: он не исправляет драгоценный камень
Минусы: он нарушает шаблон MVC (но вы можете сделать это, если хотите)
2) добавить небольшое «хакерское» переопределение функции get_autocomplete_items
, вызываемой здесь https://github.com/peterwillcn/rails4-autocomplete/blob/440a2f0ba6456f87119675b2b703f56dc54dffec/lib/rails4-autocomplete/autocomplete.rb#L54 чтобы добавить сгенерированную вручную опцию 'where' (хотя она будет работать только для activerecord, код монго на этом драгоценном камне не использует эту опцию 'where')
# after the `autocomplete :customer, :customer_name.... line
alias_method :original_get_autocomplete_items, :get_autocomplete_items # save the original method so you can call it inside your override method
def get_autocomplete_items(*parameters)
parameters['options'] ||= {} # in case you have no options defined
parameters['options']['where'] = "user_id: #{current_user.id}" # add the 'where' option to use that undocumented feature
original_get_autocomplete_items(parameters) # call the original method
end
Плюсы:не нужно ломать схему MVC
Минусы:Параметр 'where' недокументирован и используется только в методе ActiveRecord
3) Просто переопределите метод get_autocomplete_items
, определенный на вашем контроллере гемом, скопируйте код из ORM, который вы используете https://github.com/peterwillcn/rails4-autocomplete/tree/master/lib/rails4-autocomplete/orm и просто добавьте необходимое условие where
Плюсы: нет необходимости ломать скороговорку MVC, нет необходимости использовать недокументированную функцию
Минусы: вы переопределяете весь метод, если драгоценный камень изменяется при обновлении, вам нужно проверить, работает ли пользовательский метод с этими изменениями