Попробуйте следующий код. Значение, которое Вы ищете, хранится на экземпляре GuidAttribute, присоединенном к блоку
using System.Runtime.InteropServices;
static void Main(string[] args)
{
var assembly = typeof(Program).Assembly;
var attribute = (GuidAttribute)assembly.GetCustomAttributes(typeof(GuidAttribute),true)[0];
var id = attribute.Value;
Console.WriteLine(id);
}
Вы хотите изменить хэш атрибутов. Здесь есть небольшой дополнительный код, чтобы убедиться, что атрибуты, которые вам нужны, готовы к использованию с to_json или другим методом, который зависит от атрибутов при загрузке объекта.
class Location < ActiveRecord::Base
belongs_to :event
before_create :generate_oid
validates_associated :event
after_save :event_oid
attr_accessor :event_oid
def event_oid
@event_oid = @attributes["event_oid"] = event.oid if event.nil?
end
def after_initialize
event_oid
end
end
to_json и многие другие методы, которые генерируют списки вещей на основе объектов атрибуты. Которая заполняется при инициализации объекта таблицами и именами базы данных, к сожалению, переменные экземпляра не обновляют этот хэш.
PS это не очень СУХОЙ, если у вас есть ряд атрибутов, которые вы хотите использовать таким образом. Вы можете использовать массив символов, детерминированные имена методов и блок class_eval, чтобы применить этот процесс к нескольким символам одновременно.
Здесь мы возимся с внутренностями рельсов. Невозможно сказать, как это могло привести к сбою других вещей. Я не t протестировал больше, чем save и to_json, оба из которых работают, когда хэш атрибута содержит ключи, которые не являются также именами столбцов. Так что используйте его на свой страх и риск.
как насчет to_json (: methods => [: event_oid])
, это работает?
Просто создайте #to_json самостоятельно, а затем:
class Location < ActiveRecord::Base
def to_json(options={})
options[:methods] ||= []
options[:methods] << :event_oid
super(options)
end
end