9

Estoy usando Rails gem rails3-jquery-autocomplete para agregar categorías a las publicaciones.Rails gem rails3-jquery-autocomplete cómo aplicar el alcance por usuario

Me gustaría restringir la búsqueda para incluir solo las categorías que pertenecen al usuario actual o al autor de la publicación en los resultados.

La documentación dice que puedo especificar un ámbito:

: Scopes

Añadida la opción de usar los ámbitos. Pase los ámbitos en una matriz. por ejemplo: los ámbitos => [: Ámbito de aplicación1,: Scope2]

Pero no estoy seguro de cómo iba a pasar el identificador de usuario aquí?

Parece una situación comon, ¿me falta algo obvio?

He encontrado una respuesta que sugiere la modificación del método de get_item, pero que parece romper el auto-completar

Scoping the results for rails3 jquery autocomplete plugin

Respuesta

17

En posts_controller:

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

Voy a llamar primero al original Método get_autocomplete_items y luego filtrando los resultados por current_user.id.

Esta pregunta ayudó: Rails 3: alias_method_chain still used?

+1

supongamos que está utilizando más de una llamada de autocompletar. Anulación que estropeará todos los otros campos de autocompletar en su vista. Dura lección. Alguna idea de cómo solucionar – ctilley79

+1

@ ctilley79 ver mi respuesta sobre su pregunta –

6

respuesta de Deb funciona para mí. El código se puede limpiar un poco:

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

tuve un problema similar He resuelto gracias a las respuestas anteriores.

Mi autocompletar también funcionó en contra de un modelo de usuario, pero necesitaba restringir los resultados a la institución del usuario (la institución tiene muchos: usuarios). Mi controlador crea una variable de instancia @institution a la que se accede en la vista.

Aunque el método get_autocomplete_items no puede acceder directamente a la variable de instancia, me encontré con que los datos se pueden pasar a autocompletar como parámetro (nota: yo uso la gema simple_forms, por lo que la llamada de entrada se ve un poco diferente de la sintaxis raíles estándar)

En mi punto de vista:

<%= f.input :email, :url => autocomplete_user_email_institutions_path(:institution_id=>@institution.id.to_s), :as => :autocomplete %> 

En mi controlador:

autocomplete :user, :email, :extra_data => [:first_name, :last_name] 

    def get_autocomplete_items(parameters) 
    super(parameters).where(:institution_id => params[:institution_id]) 
    end 

Mi lista de autocompletar está ahora con ámbito sólo a los usuarios que trabajan para una institución en particular.

1

Para responder a la pregunta planteada por @ ctilley79, el autocompletado múltiple no es un problema porque, además de la posibilidad de pasar más valores en el hash de parámetros, también tiene acceso a los parámetros de autocompletar. En mi formulario (como ejemplo), tengo un autocompletado de City y un Zip. Necesito restringir la ciudad a aquellos en cierto estado.Así que mi acción de controlador se ve así:

def get_autocomplete_items(parameters) 
    if (parameters[:model] == City) 
    super(parameters).where("state_id" => params[:state_id]) 
    else 
    super(parameters) 
    end 
end 

También tiene acceso al método en caso de que lo necesite. Haga logger.debug en los parámetros para ver todo lo que está disponible.

0

Me enfrenté a un problema similar. Nuestro sitio es multi-tenant, por lo que todo debe tener un alcance para el inquilino.

Para hacerlo más fácil, modifiqué rails3-jquery-autocomplete para aceptar otra opción llamada: base_scope. Se necesita una cadena, que se evalúa en lugar de usar el modelo. Todas las otras funcionalidades funcionan, por lo que puede agregar ámbitos adicionales y cláusulas where si es necesario.

Mi tenedor está aquí: https://github.com/GiveCorps/rails3-jquery-autocomplete

No estoy seguro de que las pruebas demuestran que escribí siempre funcionará. Acabo de verificar que estaba usando el alcance en lugar del modelo en el método de elementos.

agradecería cualquier idea al respecto. No estoy seguro de si merece una solicitud de extracción.

3


Hay una pequeña actualización de código para los que han teniendo problemas con súper method.because de envío dinámico por encima necesidad reemplazado código para la siguiente manera:

 
def get_autocomplete_items(parameters) 
items = super(parameters) 
items = items.where(searchable: true) 
end 

a esto:

 
def get_autocomplete_items(parameters) 
items = active_record_get_autocomplete_items(parameters) 
items = items.where(searchable: true) 
end 

Referencia: https://github.com/crowdint/rails3-jquery-autocomplete/issues/278

Cuestiones relacionadas