Aplicación de iOS con RubyMotion sacando de Rails API

Construí una aplicación de Rails donde los usuarios pueden agregar música a su list de reproducción personal. Estas lists de reproducción solo las ve el propietario.

Hay un espacio de nombres "my" con un controller de lists de reproducción. Dentro del controller tengo un método para agregar una canción a la list de reproducción y eliminarla.

def add @post = Post.find params[:post_id] @playlist = current_user.playlist @playlist.posts << @post networkingirect_to root_path, :flash => { :alert => "Added to playlist!"} end def remove @playlist = current_user.playlist @playlist.posts.delete(params[:post_id]) networkingirect_to my_playlist_path, :flash => { :alert => "Removed from playlist!"} end 

Entiendo cómo sacar toda la música a través de la API ya que es una request GET. Pero, ¿cómo mantendré la adición y eliminación de canciones de la list de reproducción sincronizadas entre la aplicación iOS y la aplicación web?

"in sync" es un tema realmente complicado e involucrado. Si desea verdaderas capacidades sin connection y una verdadera "synchronization", necesitará search varias opciones. Pero simplemente use su backend de Rails ya que la fuente de datos para su aplicación de iOS es bastante fácil. Simplemente pulse los puntos finales para cargar o manipular los datos y realice los mismos cambios en la interfaz de usuario de la aplicación iOS.

Aquí hay algunas fases, comenzando por el más simple:

Fase 1 (recargando todo el set de datos cada vez)

  • UIViewController está cargado
    • GET playlist (devuelve una variedad de canciones en una list de reproducción)
      • populate tableview de respuesta
  • El usuario hace clic en una canción para agregar
    • POST playlist / song
      • GET playlist (devuelve una variedad de canciones en una list de reproducción)
        • populate tableview de respuesta
  • El usuario hace clic en una canción para eliminar
    • ELIMINAR list de reproducción / canción (devuelve verdadero)
      • GET playlist (devuelve una variedad de canciones en una list de reproducción)
        • populate tableview de respuesta

Fase 2 (cargando el set de datos una vez, luego manejando cada add / remove individualmente)

  • UIViewController está cargado
    • GET playlist (devuelve una variedad de canciones en una list de reproducción)
      • populate tableview de respuesta
  • El usuario hace clic en una canción para agregar
    • POST playlist / song (devuelve la canción)
      • agregue el elemento de la canción al tableview
  • El usuario hace clic en una canción para eliminar
    • ELIMINAR list de reproducción / canción (devuelve verdadero)
      • eliminar la canción de la vista de tabla

Fase 3 (cargando el set de datos una vez, manejando cada adición / eliminación individualmente, con compensación de latencia)

  • UIViewController está cargado
    • GET playlist (devuelve una variedad de canciones en una list de reproducción)
      • populate tableview de respuesta
  • El usuario hace clic en una canción para agregar
    • agregue el elemento de la canción al tableview
      • POST playlist / song (devuelve la canción)
        • quite el elemento agregado anteriormente a la vista de tabla si la request falló
  • El usuario hace clic en una canción para eliminar
    • eliminar la canción de la vista de tabla
      • ELIMINAR list de reproducción / canción (devuelve verdadero)
        • agregue el elemento de la canción eliminada previamente a la vista de tabla si la request falló

¿Esto es un problema con el routing en Rails?

Consulte la guía de routing de Rails.

http://guides.rubyonrails.org/routing.html

 resources :playlists do get :add, on: :member delete :remove, on: :member end 

O puede usar create y destroy acciones definidas en resources en lugar de add y remove .

Y debe enviar una request que incluya _method param para emular los methods PUT / DELETE de Rails desde su aplicación iOS.

¿Pueden los dispositivos iOS enviar requestes PUT a las aplicaciones de Rails?