Я использовал GZipStream для сжатия вывода от.NET XmlSerializer, и это работало превосходное для распаковки результата с gunzip (в cygwin), winzip и другой GZipStream.
Для ссылки, вот то, что я сделал в коде:
FileStream fs = new FileStream(filename, FileMode.Create, FileAccess.Write);
using (GZipStream gzStream = new GZipStream(fs, CompressionMode.Compress))
{
XmlSerializer serializer = new XmlSerializer(typeof(MyDataType));
serializer.Serialize(gzStream, myData);
}
Затем для распаковки в c#
FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read);
using (Stream input = new GZipStream(fs, CompressionMode.Decompress))
{
XmlSerializer serializer = new XmlSerializer(typeof(MyDataType));
myData = (MyDataType) serializer.Deserialize(input);
}
Используя утилиту 'файла' в cygwin показывает, что существует действительно различие между тем же файлом, сжатым с GZipStream и с GNU GZip (вероятно, информация заголовка, как другие заявили в этом потоке). Это различие, однако, кажется, не имеет значение на практике.
Итак, у вас есть:
class User < ActiveRecord::Base
named_scope :big_haired, :conditions => {:hair => 'massive'}
named_scope :plays_guitar, :conditions => {:plays => 'guitar'}
end
User.big_haired.plays_guitar => Множество пользователей.
Мне неизвестен способ смешать их вместе. Возможно, просто смешивание массивов:
@users = (User.big_haired + User.plays_guitar).uniq
Я только что опробовал это на некоторых своих моделях, для которых определены named_scopes. Он объединит условия как условие И, если вы их объедините. Итак ...
User.big_haired.plays_guitar
приведет к (очевидно, мой сокращенный SQL, а не настоящий материал, сгенерированный рельсами)
SELECT * FROM users WHERE hair = 'massive' AND plays = 'guitar'
Я не знаю способа объединить их как отношение ИЛИ. Было бы невероятно сложно смешать это, когда вы думаете о различных вариантах. Мы все время связываем named_scopes, это работает хорошо (если вы хотите, чтобы они были объединены AND).
Для выполнения случая и я бы либо создал специальную именованную область с построенными условиями OR, либо использовал объединение для создать уникальный набор, например:
User.big_haired | User.plays_guitar
Попробуйте Searchlogic, недавно он поддерживает объединение именованных областей с OR