модель архитектуры ruby ​​on rails, представление и DTO - PullRequest
6 голосов
/ 26 июля 2010

Я парень .NET, и я пытаюсь понять концепцию Rails и ее Active Record.

Как я вижу во всех примерах, они всегда предполагают, что ваше представление является копией 1: 1твоя модельВ действительности часто это не так.

Как представление, содержащее клиента и контактного лица (лиц), которые не связаны с этим клиентом.Пользователь должен иметь возможность редактировать как (клиент, так и контактные лица в одном представлении, например)

В каждом примере я вижу, что они связывают представление непосредственно с ОДНЫМ объектом activerecord.Все вещи, такие как модель, валидация и т. Д., Привязываются к одному объекту, который сопоставлен непосредственно с базой данных.

Может ли парень из Rails объяснить, как элегантно работать с Active Record в реальных приложенияхсложные модельные ситуации?В первый момент я думал о DTO, но я не мог себе представить, что это путь к Rails.

Ответы [ 2 ]

1 голос
/ 26 июля 2010

Согласен с Джоном ....

Вы спросили: «Как представление, содержащее клиента и контактное лицо (а), которые не связаны с этим клиентом. Пользователь должен иметь возможность редактировать оба (клиент и контактное лицо (а) в одном представлении, например)»

Хорошо, так это модель Customer с несколькими сотрудниками, верно? Если нет, замените «Сотрудник» на «Персона»

/ приложение / модель / customer.rb

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

/ приложение / модель / employee.rb

Class Employee < ActiveRecord::Base
  belongs_to :customer
end

Тогда, по вашему мнению, клиент /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 %>

Выше есть 1 форма, которая позволяет вам сохранить клиента и его сотрудников. Называется Nested Form, и я думаю, что ей нужна работа с «представлением моделей».

Если вы просто сохраните это сгруппированным, как сгруппировано в реальной жизни, все будет довольно просто.

0 голосов
/ 26 июля 2010

Поскольку в Rails используется архитектура MVC, вполне возможно - и зачастую - & mdash; иметь контроллер, который координирует несколько моделей и предоставляет их представлению для рендеринга.

Я думаю, что думать об объектах передачи данных - это тупик, потому что они просто тупые держатели данных, а модели ActiveRecord в Rails имеют больше умов. У них есть связанные модели (я знаю, что DTO могут иметь структурные отношения с другими DTO), пользовательские методы поиска и логика проверки для начала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...