¡Gracias a todos por sus rápidas respuestas! Tus respuestas combinadas me dieron las piezas que necesitaba para entender este rompecabezas, creo.
(En un problema relacionado, recibía muchos errores nulos como "Objeto no admite #inspect" y "método indefinido 'claves' para nil: NilClass". Pude resolverlo ahora, por . retirar el campo att_accessor en total)
al experimentar con este caso particular, esto es lo que he encontrado:
en realidad, el nombre de campo no será persistieron a la base de datos.
user = User.new(:name=>"somename")
Solo establecerá el atributo en el objeto, pero no persistirá la columna: name en la base de datos. Al igual que los siguientes 'barandas consola' espectáculos de salida:
> user
=> <User id: nil, created_at: nil, updated_at: nil>
> user.save
=> true
> user
=> <User id:1, created_at: 2011-01-19 12:37:21, updated_at: 2011-01-19 12:37:21>
Asumo que esto se debe a que el colocador * hecha por attr_accessor anulará colocador de ActiveRecord * (que se encarga de la persistencia de base de datos). Todavía se puede recuperar el valor de la: campo de nombre del objeto, sin embargo, como esto:
> user.name
=> "somename"
Así que, en conclusión, he aprendido que el uso de attr_accessor en los campos podría dar lugar a que no se persistido a la base de datos .Y aunque pensé que attr_accessible describe los campos en la base de datos que deberían ser accesibles desde el exterior, no parece marcar la diferencia en este caso.
Sola mejor respuesta que he visto a esta pregunta masivamente importante y básica. Por alguna razón, esto simplemente no se explica para las personas. Gracias. – Ethan
Esta es una muy buena explicación de las diferencias entre los dos, pero no es la pregunta: ¿qué sucede cuando los usa tanto en el mismo campo (o lo que sucede con la persistencia). Para eso, se mi resumen de respuesta a continuación. – Magne