Просто добавьте к разговору... C#/.NET, конечно, доступен на других платформах не-Microsoft.
Между теми двумя тут же, можно быть нацелены на Linux, Mac, Wii... Я уверен, было ли достаточно финансирования/интереса в нем, они могут стать Моно для работы ps3 также. В той точке Вы были бы в состоянии записать для всех крупнейших игровых платформ с помощью C# (хотя, вероятно, не с серовато-синим XNA).
кроме того, любому задающемуся вопросом о производительности... много больших вещей находится в работах, таких как новая поддержка Mono быстрых математических операций с плавающей точкой с помощью их расширений SIMD (x86 только на данный момент, конечно): http://tirania.org/blog/archive/2008/Nov-03.html
Как указал Паллан, параметр : select
не может использоваться с параметром : include
. Однако опция : joins
может. И это то, что вам здесь нужно. Фактически, он может принимать те же аргументы, что и : включить
или использовать ваш собственный SQL. Вот грубый, непроверенный код, который может потребовать незначительных изменений.
Event.all(:select => "events.id, patients.lname, events.patient_id, events.event_type, max(events.event_date) as max_date", :joins => :patient, :group => "patients.lname, events.patient_id, events.event_type")
Обратите внимание, что я немного изменил вещи. Я переименовал псевдоним event_date
в max_date
, чтобы не было путаницы по поводу того, какой атрибут вы имеете в виду. Атрибуты, используемые в вашем запросе : select
, доступны в возвращенных моделях. Например, здесь вы можете вызвать event.max_date
. Я также добавил столбец события id
, потому что иногда вы можете получить неприятные ошибки без атрибута id
(в зависимости от того, как вы используете возвращенные модели).
Основное различие между : include
и : joins
заключается в том, что первый выполняет активную загрузку связанных моделей. Другими словами, он автоматически выбирает связанный объект пациента для каждого события. Для этого требуется управление оператором select
, потому что ему необходимо одновременно выбрать атрибуты пациента. С : объединяет
объекты пациента не создаются.
select
, потому что ему необходимо одновременно выбрать атрибуты пациента. С : объединяет
объекты пациента не создаются. он автоматически выбирает связанный объект пациента для каждого события. Для этого требуется управление оператором select
, потому что ему необходимо одновременно выбрать атрибуты пациента. С : объединяет
объекты пациента не создаются. В текущей версии AR (2.3) Я думаю, ваш единственный вариант - использовать find_by_sql. Почему? Ваши собственные атрибуты SELECT. ActiveRecord позволяет: выбирать и: включать аргументы в вызов поиска. К сожалению, их нельзя использовать вместе. Если вы укажете оба варианта: select будет проигнорирован. В вашем примере вам нужно выбрать, чтобы ограничить количество столбцов и получить функцию MAX.
Я слышал, что есть патч / хак, чтобы заставить их работать вместе, но я не уверен, где он находится.
Peer
Включить - это просто умное левое соединение, вы можете использовать его вместе с select и group_by в вашем .find