2010-07-26 8 views
6

Soy un tipo .NET y trato de entender el concepto detrás de Rails y sus cosas Active Record.ruby ​​on rails modelo de arquitectura, vista y DTOs

Como puedo ver en todos los ejemplos, siempre asumen que su vista es una copia 1: 1 de su modelo. En realidad, con frecuencia eso no es verdad.

Al igual que una vista que contiene una y persona de contacto del cliente (s) que son no relacionada con ese cliente. El usuario debería poder editar ambos (cliente y persona (s) de contacto en una vista, por ejemplo)

En cada ejemplo, veo que enlazan la vista directamente a UN objeto activerecord. Todas las cosas, como el modelo, la validación, etc. se unen a un objeto que se asigna directamente a la base de datos.

¿Podría un tipo de Rails explicar la forma elegante de trabajar con Active Record en aplicaciones reales en situaciones de modelos complejos? En el primer momento, estaba pensando en DTO, pero no podía imaginar que este fuera el camino a seguir con Rails.

Respuesta

0

Dado que Rails usa una arquitectura MVC, es perfectamente posible — y, a menudo, — para tener un controlador que coordine varios modelos y los proporcione a la vista para su renderizado.

Creo que pensar en Data Transfer Objects es un callejón sin salida porque son simples creadores de datos y los modelos ActiveRecord en Rails tienen más inteligencia. Tienen modelos asociados (sé que los DTO pueden tener relaciones estructurales con otros DTO), métodos de búsqueda personalizados y lógica de validación para empezar.

1

de acuerdo con John ....

Se preguntó: ". Como una visión que posee una persona (s) de clientes y contactos que no están relacionados con ese cliente usuario debe ser capaz de editar tanto (al cliente y persona (s) de contacto en una vista, por ejemplo) "

Ok, este es un modelo de Cliente que tiene algunos empleados, ¿no? Si no es así, sustituya "Empleado", con "Persona"

/app/model/customer.rb

Class Customer < ActiveRecord::Base 
    has_many :employees 
    accepts_nested_attributes_for :employees 
end 

/app/model/employee.rb

Class Employee < ActiveRecord::Base 
    belongs_to :customer 
end 

Luego, en vista de su el cliente /app/views/customers/show.html.erb

<%= form_for(@customer) do |f| %> 

<%= f.text_field :name %> 
.... yada yada .... 

<%= f.fields_for(:employees) do |ef} %> 
    <%= ef.text_field :first_name%> 
    <%= ef.text_field :phone %> 
<% end %> 

<%= f.submit %> 

<% end %> 

lo anterior tiene 1 forma que le permite guardar º e cliente y sus empleados. Llamado formulario anidado, y creo que hace el trabajo de necesitar "ver modelos".

Si solo lo agrupan cómo se agrupa la vida real, es bastante simple.

+0

eso está bien porque están relacionados, pero ¿qué pasa si no están relacionados? ¿Es posible usar form_for (@customer) y form_for (@employee) en una sola forma? – awex

+1

seguro que puedes. Probablemente eso termine en algún tipo de controlador de Dashboard, pero puede tener dos o más formularios en una página HTML. –