Как активно загружать объекты с помощью специального соединения в рельсах?

Обе эти структуры направлены на разделение проблем - например, взаимодействие с источником данных (моделью), логикой приложения (или превращением этих данных в полезную информацию) (контроллер / презентатор) и отображаемым кодом (вид). В некоторых случаях модель также может использоваться для превращения источника данных в абстракцию более высокого уровня. Хорошим примером этого является проект MVC Storefront .

Здесь обсуждается здесь относительно различий между MVC и MVP.

Сделанное различие заключается в том, что в приложении MVC традиционно есть представление, и контроллер взаимодействует с моделью, но не друг с другом.

Конструкции MVP имеют Presenter для доступа к модели и взаимодействия с представлением.

Сказав, что ASP.NET MVC по этим определениям представляет собой структуру MVP, потому что Controller обращается к Модели, чтобы заполнить представление, которое не имеет логики (просто отображает переменные, предоставляемые контроллером).

Чтобы, возможно, получить представление об отличии ASP.NET MVC от MVP, посмотрите эту презентацию MIX Скотта Гензельмана.

30
задан Orion Edwards 1 October 2008 в 06:47
поделиться

3 ответа

Разве Вы не можете добавить использование условий объединения ActiveRecord?

, Например, у меня есть довольно сложный запрос с помощью нескольких зависимых записей, и он хорошо работает путем объединения условий, и включайте директивы

Contractors.find(
  :all, 
  :include => {:council_areas => :suburbs},
  :conditions => ["suburbs.postcode = ?", customer.postcode]                 
)    

Предположение что:

  1. пригород have_many CouncilAreas
  2. CouncilAreas have_many Подрядчиков

Это соединение возвращает Подрядчиков в пригороде, определенном [1 111] customer.postcode.

сгенерированный запрос похож:

SELECT contractors.*, council_areas.*, suburbs.*
FROM `contractors` 
LEFT OUTER JOIN `contractors_council_areas` ON `contractors_council_areas`.contractor_id = `contractors`.id 
LEFT OUTER JOIN `council_areas` ON `council_areas`.id = `contractors_council_areas`.council_area_id 
LEFT OUTER JOIN `council_areas_suburbs` ON `council_areas_suburbs`.council_area_id = `council_areas`.id 
LEFT OUTER JOIN `suburbs` ON `suburbs`.id = `council_areas_suburbs`.suburb_id WHERE (suburbs.postcode = '5000')

(Примечание: Я отредактировал список столбцов для краткости).

7
ответ дан Toby Hede 1 October 2008 в 06:47
поделиться

Можно ли разработать немного больше на точно, что Вы пытаетесь выполнить с этим запросом?

Также смотрят на в: опция соединений для находки. Это позволяет Вам определять, как Вы хотите таблицы, к которым присоединяются. текст ссылки

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

1
ответ дан user19898 1 October 2008 в 06:47
поделиться
  • 1
    @Neil: Я предполагаю, что имел в виду больше вроде " осуществите рефакторинг для предотвращения dynamic_cast". я смотрю довольно трудно на последствия, прежде чем я начну засовывать " virtual" в иерархиях наследования, потому что я знаю I' m создание компромисса и иногда выбор различного шаблона разработки может решить проблему... – leander 24 March 2009 в 15:51

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

Person.reflect_on_association(:companies).options[:conditions] = 'people.magical_flag IS NULL'
3
ответ дан 28 November 2019 в 00:29
поделиться
Другие вопросы по тегам:

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