2009-11-24 10 views
10

Cuando uso el attr_accessible para especificar qué campos de mi Modelo I expondré, ¿es cierto también para el script/consola? Quiero decir que algo que no especifiqué como attr_accessible ¿no será accesible también a través de la consola?attr_accessible in rails Active Record

Respuesta

19

Esto solo es válido para la asignación de masa. Por ejemplo, si se va a establecer attr_protected :protected en su modelo:

>> Person.new(:protected => "test") 
=> #<Person protected: nil> 

Por el contrario, podría configurar todos los atributos que desea como accesible a través de attr_accessible.

Sin embargo, el siguiente todavía funcionará:

>> person = Person.new 
=> #<Person protected: nil> 
>> person.protected = "test" 
=> #<Person protected: "test"> 

Este es el mismo comportamiento que en controladores, vistas, etc. attr_protectedsólo protege contra la asignación de masas de variables, principalmente de formas, etc.

7

I conocer qué:

Especifica una lista blanca de atributos modelo que se pueden establecer a través de masa-asignación, como new(attributes), update_attributes(attributes), o attributes=(attributes). Esto es lo contrario de la macro attr_protected:

Mass-assignment will only set attributes in this list, to assign to the rest of 
attributes you can use direct writer methods. This is meant to protect sensitive 
attributes from being overwritten by malicious users tampering with URLs or forms. 
If you‘d rather start from an all-open default and restrict attributes as needed, 
have a look at `attr_protected`. 

por lo que significa que simplemente evitar masa-asignación pero todavía puede establecer un valor.

7

La consola se comporta exactamente como su aplicación Rails. Si protegió algunos atributos para un modelo específico, no podrá asignar estos atributos de forma masiva desde la consola o desde la aplicación Rails.

1

Cuando especifica que algo sea attr_accessible, solo se puede acceder a estos elementos en la consola o mediante la interfaz del sitio web.

por ejemplo: Supongamos que usted hizo name y email ser attr_accessible:

attr_accessible :name, :email 

y dejado fuera created_at y updated_at (que se supone que). Entonces solo puede editar/actualizar esos campos en la consola.

0

Si desea exponer un campo de formulario su modelo, puede utilizar

attr_accessor :meth # for getter and setters 
attr_writer :meth # for setters 
attr_reader :meth # for getters 

o si desea añadir un poco de comportamiento para su atributo, tendrás que utilizar atributos virtuales

def meth=(args) 
... 
end 
def meth 
... 
end 

aclamaciones.

Cuestiones relacionadas