¿Cuándo usa attr_reader
/attr_writer
/attr_accessor
en los modelos Rails?uso de attr_accessor en Rails
Respuesta
attr_accessor se puede utilizar para los valores que no desea almacenar en la base de datos directamente y que solo existirán durante la vida del objeto (por ejemplo, contraseñas).
attr_reader se puede utilizar como una de varias alternativas para hacer algo como esto:
def instance_value
"my value"
end
Nunca, a menos que lo necesite específicamente. Los accesadores automáticos respaldados por la base de datos se crean para usted, por lo que no debe preocuparse.
Cualquier attr_accessor
s crea crear cambiará el @attr
relevante en el objeto de rieles, pero se perderá cuando se destruya el objeto, a menos que lo vuelva a colocar en la base de datos. A veces quieres este comportamiento, pero es inusual en una aplicación de rieles.
Ahora en ruby, es una historia diferente, y terminas usándola con mucha frecuencia. Pero me sorprendería si los necesitas en rieles, especialmente al principio.
perfecto - gracias. (Yo también te votaría, pero acabo de llegar aquí y parece que necesito 15 puntos primero ... Esa mecánica parece poco amigable para los usuarios nuevos.) – Ethan
Nota: a partir de Rails 3.x se requiere 'attr_accessible' (de forma predeterminada) para cada modelo cuyos atributos desea permitir la escritura (por ejemplo, a través de un formulario POST). Esto se puede cambiar en 'application.rb' para compatibilidad con versiones anteriores, pero se agregó como una medida de seguridad para exigir que se incluyan explícitamente en la lista blanca atributos que _deberían ser actualizables por los usuarios. Como beneficio adicional, todos los atributos de un modelo (columnas db) son visibles allí mismo en el modelo, por lo que no tiene que recordar qué diablos se llamó esa columna :-) –
Si usted lo está utilizando para validar la aceptación del TERMS_OF_SERVICE, realmente debería considerar el uso valida: TERMS_OF_SERVICE,: aceptación => verdadero Creará un atributo virtual y es mucho más conciso.
http://guides.rubyonrails.org/active_record_validations.html#acceptance.
Un ejemplo es tener una cantidad de opciones almacenadas en una columna serializada. El creador de formularios se quejaría si intentas tener un campo de texto para una de estas opciones. Puede usar attr_accessor para simularlo, y luego en la acción de actualización guárdelo en la columna serializada.
Los modelos de rieles son solo clases de ruby que heredan de ActiveRecord::Base
. ActiveRecord emplea attr_accessor
s para definir getters y setters para los nombres de columnas que hacen referencia a la tabla de la clase ruby. Es importante notar que esto es solo por persistencia; los modelos siguen siendo solo clases de rubí.
attr_accessor :foo
es simplemente un acceso directo para el siguiente:
def foo=(var)
@foo = var
end
def foo
@foo
end
attr_reader :foo
es simplemente un acceso directo para el siguiente:
def foo
@foo
end
attr_writer :foo
es un acceso directo para el siguiente:
def foo=(var)
@foo = var
end
attr_accessor
es un shor tcut para la getter y setter mientras attr_reader
es el acceso directo para el captador y attr_writer
es un acceso directo para sólo el colocador .
En rieles, ActiveRecord utiliza estos captadores y adaptadores de forma conveniente para leer y escribir valores en la base de datos. PERO, la base de datos es solo la capa de persistencia. Debería poder usar attr_accessor
y attr_reader
como lo haría con cualquier otra clase de ruby para componer adecuadamente su lógica comercial.Como necesita obtener y establecer los atributos de sus objetos fuera de lo que necesita para mantenerse en la base de datos, use el attr_
s según corresponda.
Más información:
http://apidock.com/ruby/Module/attr_accessor
- 1. attr_accessor for array?
- 2. attr_accessor no accesible en accept_nested_attributes_for
- 3. ¿Cómo inicializar los valores del atributo 'attr_accessor'?
- 4. attr_accessor valores predeterminados
- 5. Uso de jquery en Rails
- 6. Obtiene las variables attr_accessor/instance en ruby
- 7. Crear atributos de clase dinámicamente con attr_accessor
- 8. Uso de Rails Form Helpers con clases personalizadas serializadas
- 9. Falta el método de uso en Rails
- 10. Uso de HTML en mensajes flash Rails
- 11. Uso de rsyslogd en Rails 3.0
- 12. Rieles: uso de clases personalizadas en Rails
- 13. ¿Por qué usar el attr_accessor, attr_reader y attr_writer de Ruby?
- 14. Uso del ayudante textarea en formularios Rails
- 15. Ruby: métodos generados attr_accessor - cómo iterarlos (en to_s - formato personalizado)?
- 16. Usando attr_accessor y attr_accessible en el mismo campo
- 17. Uso de Rails 3.1 con DataTables
- 18. Uso de webhooks Stripe con Rails
- 19. Rails ignorando config.action_dispatch.x_sendfile_header? Uso de Thin + Nginx
- 20. Uso de varios controladores en una vista en Rails
- 21. Uso de stylesheet_link_tag y javascript_include_tag de Rails en Liquid Drop
- 22. método setter primordial de attr_accessor cuando incluyendo InstanceMethods módulo
- 23. ¿Por qué no puedo usar attr_accessor dentro de initialize?
- 24. ¿Cómo configuro un attr_accessor para una variable de instancia dinámica?
- 25. el uso de plugins jQuery en Rails 3
- 26. Uso de Ajax para actualizar un componente parcial en Rails
- 27. JRuby on Rails: el uso de clases personalizadas de Java en su aplicación Rails
- 28. ¿Cómo uso hidden_field en form_for en Ruby on Rails?
- 29. No se puede acceder a attr_accessor variables definidas
- 30. PATIO: documento par getter/setter personalizado como attr_accessor
supongo que quiere decir attr_accessor? –
ah bien. Gracias. – Ethan