Один рендеринг контроллера с помощью представлений другого контроллера

Похоже, что бизнес-правило, которое вы пытаетесь применить, выглядит следующим образом:

P IMPLIES Q

Это логически эквивалентно:

(NOT P) OR Q

Таким образом, вы можете просто написать:

bool IsDry(bool isRaining, bool isWithUmbrella) {
    return !isRaining || isWithUmbrella;
}

Об отрицательном (не) мышлении

В зависимости от предиката, сначала может быть проще думать с точки зрения его отрицания.

NOT (P IMPLIES Q)

Теперь мы подставим тождество выше:

NOT ((NOT P) OR Q)

Теперь мы можем применить Закон Деморгана :

P AND (NOT Q)

Поскольку это отрицание, мы должны отрицать это, чтобы вернуться к позитиву. Поначалу двойное отрицание может показаться запутанным, но возвращаясь к примеру, мы имеем:

bool IsDry(bool isRaining, bool isWithUmbrella) {
    bool isWet = (isRaining && !isWithUmbrella);
    return !isWet;
}

Дополнительные советы

Вот несколько примеров общего boolean переписывания выражений :

BEFORE                                  | AFTER
________________________________________|________________________________________
                                        |
if (condition == true) ...              | if (condition) ...
________________________________________|________________________________________
                                        |
if (condition == false) ...             | if (!condition) ...
________________________________________|________________________________________
                                        |
if (condition) {                        | return condition;
    return true;                        |
} else {                                |
    return false;                       |
}                                       |
________________________________________|________________________________________
                                        |
if (condition1) {                       | return (condition1 && condition2
   if (condition2) {                    |             && condition3);
      if (condition3) {                 |
         return true;                   |
      } else {                          |
         return false;                  |
      }                                 |
   } else {                             |
      return false;                     |
   }                                    |
} else {                                |
   return false;                        |
}                                       |
________________________________________|________________________________________
                                        |
return (condition1 && !condition2) ||   | return condition1 != condition2;
   (condition2 && !condition1);         | // or  condition1 ^ condition2;

Обратите внимание, что предопределенный ^ в C # является оператором exclusive-or , даже для целочисленных типов (то есть это не оператор возведения в степень) , Предопределенные && и || являются условными логическими операторами , которые выполняют оценку «короткого замыкания».

См. Также

37
задан Paul 18 June 2009 в 14:55
поделиться

3 ответа

Визуализация шаблона действительно должна работать

 render :template => "question/answer"

Проблема, с которой вы столкнулись, заключается в том, что партиалы смотрят не в том месте. Исправить это просто, просто сделайте свои частичные данные абсолютными в любых общих шаблонах. Например, в файле question / answer.html.erb должно быть

<%= render :partial => 'question/some_partial' %>

, а не обычное

<%= render :partial => 'some_partial' %> 
56
ответ дан 27 November 2019 в 04:39
поделиться

Вы можете добиться этого с помощью:

render 'question/answer'
13
ответ дан 27 November 2019 в 04:39
поделиться

Вы можете попробовать плагин inherit_views ( http://github.com/ianwhite/inherit_views/tree/master ), я упомянул здесь в ответе на это вопрос .

0
ответ дан 27 November 2019 в 04:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: