Closed dlisidoraguelfand closed 4 years ago
Hola @dlisidoraguelfand !
A modo de contexto, si te fijas en la declaración de cada ruta, en la parte que dice to: playlist#<algo>
, lo que viene después del "#" es el método del controlador (en este caso playlist
) al cual "relacionamos" la ruta. En el controlador playlist
verás los métodos:
def song_list
end
def add_song
@playlist.songs << @song
redirect_to playlist_path(@playlist)
end
Ahora bien, respecto a tu pregunta, la verdad es que si tienen una vista. Si corres la app y vas a la ruta /playlists/<id>/songs-to-add
verás lo que se renderea en: playlists/song_list.html.erb
. (Primera ruta que mencionas)
Respecto a la segunda, si inspeccionas el html
de esta misma ruta en el navegador, verás algo como esto:
<tr>
<td>Canción 1</td>
<td>Albúm</td>
<td>Artista</td>
<td><a href="/playlists/1/add/1">Add to playlist</a></td>
</tr>
Si te fijas, el último elemento tiene un link a /playlists/1/add/1
, el cual es generado gracias a<%= link_to 'Add to playlist', add_playlist_song_path(@playlist, song) %>
.
Quiere decir que cuando hagas click en él, te llevará a /playlists/1/add/1
, el cual te llevará al método del controlador y este hace un redirect_to playlist_path(@playlist)
. Por lo tanto, te lleva nuevamente a /playlists/1
.
Finalmente, y a modo de aclaración, no es necesario que todos los métodos estén asociados directamente a una vista en particular, pueden simplemente ser un paso "intermedio" para realizar una acción dentro de tu aplicación.
Espero que se haya entendido 😄
Hola! Muchas gracias. Lo que no entiendía y sigo sin entender es por qué si voy a playlists/:id/songs-to-add
se renderea playlists/song_list.html.erb
, si el método asociado del controlador no redirecciona a ninguna vista.
Porque ahí entra la "magia" de Rails 😅. Por convención, si no retornas "nada" (entrecomillas porque si estás retornando algo) Rails irá a buscar alguna vista dentro de la carpeta que tenga el mismo nombre del controlador (playlists) y el mismo nombre del método (song_list).
Perfecto, no sabía, muchas gracias!
Hola! Estoy leyendo la ayudantía de asociaciones, ya que tengo que hacer algo muy parecido a la asociación Playlists-Songs para el proyecto. No entiendo como funcionan las últimas rutas, porque no hay vistas correspondientes. No sé si tiene que ver con como Scaffold construye las vistas, yo no lo usé.
get 'playlists/:id/songs-to-add', to: 'playlists#song_list', as: :playlist_song_list get 'playlists/:id/add/:song_id', to: 'playlists#add_song', as: :add_playlist_song