compose_of :money, %w(to_i to_копеек) do |value|
Money.new(value)
end
class Money
to_копейки
end
On 20 нояб, 16:05, faust45 <faus...@mail.zp.ua> wrote:
> А какже compose_of?
> Разве он в етом случае не подходит?
>
> compose_of :money, %w(to_i to_копеек) do |value|
> Money.new(value)
> end
>
> class Money
> to_копейки
> end
>
Да, это оно самое. Позор мне. Только composed_of, а не compose_of.
Исчерпывающие примеры:
http://api.rubyonrails.org/classes/ActiveRecord/Aggregations/ClassMethods.html
class Decorator < Array
def initialize(ids)
super
@ids =
case ids
when String
self[0...0] = ids.split(',').map(&:to_i)
end
def to_s
@ids.join(',')
end
end
только етот обект его нельзя будет модифицировать
ето ещё можно посмотреть
http://github.com/Fingertips/attribute-decorator/tree/master
On 20 нояб, 08:24, "Max Lapshin" <max.laps...@gmail.com> wrote:
> Честно говоря, я смутно понимаю, как это мне поможет.
> У меня в базе записано:
>
> id | visitor_ids
> 1 | 234,3254,564,13,536,5
>
> Я хочу, что бы было так:
>
> > Event.find(:first)
>
> # => #<Event id:1 visitor_ids: [234, 3254, 564, 13, 536, 5]>
>
> При этом visitor_ids -- не прокси объект, а массив.
> Эта штука оказалась удобнее чем
> мемкешд и существенно быстрее, чем
> лишний селект из базы.
Про селект понятно. А про мемкешд
непонятно, чем неудобно. "Просто добавь
воды":
class Event
has_many :memberships, :class_name => "EventMembership"
def member_ids
CACHE["Event#{id}.member_ids"] ||= memberships.map{|m| m.person_id}
end
end
class EventMembership
belongs_to :event
belongs_to :person
end
class EventMembership
...
after_create :clear_event_member_ids_cache
def clear_event_member_ids_cache
CACHE["Event#{event_id}.member_ids"] = nil
end
end
class EventMembership
...
after_create :clear_event_member_ids_cache
def clear_event_member_ids_cache
CACHE["Event#{event_id}.member_ids"] = nil
end
end
По-моему, ты просто решаешь проблему
кеша не в том месте. Это, конечно, не
оправдывает корявость кустомных типов
в AR, но я бы кеш держал логически
отдельно от кошерных атрибутов.