Вложенные формы с триггерами - PullRequest
0 голосов
/ 01 февраля 2011

Я пытаюсь создать конфигуратор продукта с несколькими бизнес-правилами. У меня есть две модели, одна - продукт, вторая - компонент. продукт имеет много компонентов, но один и тот же компонент может быть использован в разных продуктах.

У меня есть модели, отношения и т. Д., И я пытаюсь построить представление представления в контроллере продукта

- в контроллере

def show
@product = Product.find(params[:id])
@productelements = Product.find(params[:id]).elements
end 

- в поле зрения

<% @productelements.each do |p| %>
   <li><%= p.name </li> 
   <li><%= p.quantity </li> 
<% end %>

Пока все хорошо, за исключением того, что нужно соблюдать определенные правила. Это должно быть в состоянии настроить продукты, такие как компьютеры. Количества определяются пользователем (в некоторых случаях), но они могут влиять другие элементы. Например, если у меня есть следующее:

 Element    Quantity
 Processor A    1
 RAM in GB      2
 HDD Type B     2

Пользователь может изменить процессор на процессор B, но в этом случае количество жесткого диска необходимо будет изменить на 1. Это только для иллюстрации.

Так что я пытаюсь понять, как: - Оберните эти циклические элементы в форму. - Сделайте форму реагирующей на изменения и вызовите функцию, которая будет проверять и корректировать при необходимости. - отобразить продукт с проверенными полями.

Какой совет вы можете мне дать? Или, может быть, подход совсем не реалистичен? Имейте в виду, что есть много продуктов и много правил, поэтому я не хотел делать заявления о контроле внутри контроллера, поскольку это тянет на мили!

Спасибо!

1 Ответ

0 голосов
/ 02 февраля 2011

ОК, чтобы сначала немного исправить вышеприведенный код, вы ищете один и тот же продукт дважды без необходимости. Вместо вашего первого блока кода сделайте следующее:

def show
  @product = Product.find(params[:id])
  @productelements = @product.elements
end

Как видите, я заменил второй вызов find ().

Теперь к твоему большему вопросу, я думаю, что ты обдумываешь это. Если есть бизнес-правила, связанные с компонентами, выразите их в модуле, вставленном в каталог lib /, и смешайте этот модуль с моделью Product. Таким образом, вы сможете протестировать бизнес-правила вне контекста формы, чтобы убедиться, что вы правильно поняли.

Затем вы можете использовать указанные проверенные правила в качестве пользовательской проверки в форме. Итак, в вашем примере, если пользователь изменяет ЦП А на ЦП В, но оставляет жесткий диск в неправильном количестве, проверка бэкэнда поймает и отметит это.

Затем вы можете представить эту проверку через ajax внешнему интерфейсу для более приятного пользовательского интерфейса, но по одной вещи за раз.

Имеет смысл?

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