Rails gem rails3-jquery-autocomplete cómo el scope por usuario

Estoy usando Rails gem rails3-jquery-autocomplete para agregar categorías a las publicaciones.

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 scope:

: scopes

Opción añadida para utilizar ámbitos. Pase los ámbitos en una matriz. Ej .: scopes => [: scope1,: scope2]

¿Pero no estoy seguro de cómo pasar la identificación de usuario aquí?

Parece un escenario común, ¿me falta algo obvio?

Encontré una respuesta que sugiere modificar el método get_item , pero parece romper el autocompletado

Definición del scope de los resultados para rails3 jquery autocompletar plugin

En posts_controller :

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

Primero estoy llamando al método original get_autocomplete_items y luego filtrando los resultados por current_user.id.

Esta pregunta ayudó: Rails 3: alias_method_chain aún se usa?

Tuve un problema similar que resolví gracias a las respuestas anteriores.

Mi autocompletado también funcionó contra 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, descubrí que los datos PUEDEN pasarse a autocompletar como un parámetro (nota: uso la gem simple_forms, por lo que la llamada de entrada parece un poco diferente a la syntax de los Rails estándar).

En mi 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 ahora está dirigida solo a los usuarios que trabajan para una institución en particular.

La 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 

Hay una pequeña actualización en el código para aquellos que tienen problemas con el súper método. Debido al dynamic envío, el código anterior debe reemplazarse de la siguiente manera:

 def get_autocomplete_items (parámetros)
  items = super (parámetros)
  items = items.where (searchable: true)
 fin

a esto:

 def get_autocomplete_items (parámetros)
  items = active_record_get_autocomplete_items (parámetros)
  items = items.where (searchable: true)
 fin

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

Para responder a la pregunta planteada por @ ctilley79, los autocompletados múltiples no son 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 autocompletado tanto en City como en Zip. Necesito restringir la Ciudad a aquellos en cierto estado. Así que mi acción del 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.

Me enfrenté a un problema similar. Nuestro sitio es multi-inquilino, por lo que todo debe ser objeto de scope para el inquilino.

Para hacer esto más fácil, modifiqué rails3-jquery-autocomplete para aceptar otra opción llamada: base_scope. Toma una cadena, que se evalúa en lugar de usar el modelo. Todas las demás funciones funcionan, por lo que puede agregar ámbitos adicionales y cláusulas donde sea necesario si lo necesita.

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

No estoy seguro de que las pruebas que escribí prueben que siempre funcionarán. Acabo de comprobar que estaba usando el scope en lugar del modelo en el método de elementos.

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

    Intereting Posts