Después de generar y explorar los recursos de los usuarios, vamos a trabajar sobre los recursos Microposts que van a estar relacionados con los usuarios.
Al igual que con los recursos de usuarios, vamos a generar el código con scaffold para el recurso Microposts
$rails generate scaffold Micropost content:string user_id:integer
Para actualizar nuestra base de datos con el nuevo modelo de datos, es necesario ejecutar:
$ rake db:migrate
Ahora estamos en condiciones de crear microposts de la misma manera que hemos creado los usuarios.
El comando scaffold ha actualizado el archivo de ruteo de Rails con una regla para los recursos Microposts, el contenido se encuentra en el archivo config/routes.rb.
Al igual que con los usuarios, la regla del ruteo resources: microposts mapea las URLs de los microposts con las acciones en el controlador Microposts, como vemos en la Tabla.
| HTTP request | URL Action | Proposito |
| GET | index | Pagina para listar todos los micropost |
| GET | show | Pagina para mostrar el micropost con id 1 |
| GET | new | Pagina para crear un nuevo micropost |
| POST | create | Crea un nuevo micropost |
| GET | edit | Edita el micripost con id 1 |
| PUT | update | Actualiza el micropost con id 1 |
| DELETE | destroy | Elimina el micropost con id 1 |
El controlador de microposts aparece en forma esquematica en el archivo app/controller/microposts_controller.rb, el contenido es casi identico al que se encuentra en el archivo app/controller/users_controller.rb
class Micropostscontroller < Applicationcontroller
def index
…
end
def show
…
end
def new
…
end
def edit
…
end
def create
…
end
def update
…
end
def destroy
…
end
end
Vamos a insertar algunos micropost, en la url http://localhost:3000/microposts/new en el campo user, insertar el id 1, o algun id de usuario que estemos seguros haber insertado.
Para hacer los micropost similares a twitter vamos a poner una restriccion del tamaño de caracteres permitidos (140), para eso usaremos una validacion.
Editar el archivo app/models/micropost.rb y le agregamos lo siguiente
validates :content, :length => { :maximum => 140 }
class Micropost < ActiveRecord::Base
validates :content, :length => { :maximum => 140 }
end
Con la validacion que hemos agregado, si excedemos los 140 caracteres tendremos un mensaje de error como el siguiente
Un usuario tiene muchos micropost
Una de las características más potentes de Rails es la capacidad para formar asociaciones entre los diferentes modelos de datos. En el caso de nuestro modelo de usuario, cada usuario tiene muchos microposts.
Para implementar esto en código vamos a editar el archivo app/models/user.rb
y le agregamos lo siguiente has_many :microposts y el archivo app/models/micropost.rb le agregamos belongs_to :user y nos queda de la siguiente manera
class User < ActiveRecord::Base
has_many :microposts
end
class Micropost < ActiveRecord::Base
belongs_to :user
validates :content, :length => { :maximum => 140 }
end
Por ahora, podemos examinar la asociación de usuarios-micropost mediante la consola, una herramienta útil para interactuar con aplicaciones Rails.
Primero invocamos la consola con rails console y luego recuperar el primer usuario de la base de datos y la asignamos a una valiable utilizando first_user = User.first
Como pueden ver para obtener los microposts asociados ejecutamos first_user.microposts


















