ActiveRecord, который Виртуальные Атрибуты рассматривали как запись, приписывает

Попробуйте следующий код. Значение, которое Вы ищете, хранится на экземпляре 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);
}
10
задан Skilldrick 30 August 2010 в 19:21
поделиться

3 ответа

Вы хотите изменить хэш атрибутов. Здесь есть небольшой дополнительный код, чтобы убедиться, что атрибуты, которые вам нужны, готовы к использованию с 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, оба из которых работают, когда хэш атрибута содержит ключи, которые не являются также именами столбцов. Так что используйте его на свой страх и риск.

6
ответ дан 4 December 2019 в 00:25
поделиться

как насчет to_json (: methods => [: event_oid]) , это работает?

3
ответ дан 4 December 2019 в 00:25
поделиться

Просто создайте #to_json самостоятельно, а затем:

class Location < ActiveRecord::Base
  def to_json(options={})
    options[:methods] ||= []
    options[:methods] << :event_oid
    super(options)
  end
end
3
ответ дан 4 December 2019 в 00:25
поделиться
Другие вопросы по тегам:

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