Я новичок в Ruby и пытаюсь создать модель, в которой коллекции собираются, если их не существует.
Я уже перегрузил отдельные атрибуты, например, так:
class My_class < ActiveRecord::Base
def an_attribute
tmp = super
if tmp
tmp
else
#calculate this and some similar, associated attributes, for example:
self.an_attribute = "default" #{This does work as it is calling an_attribute=() }
self.an_attribute
end
end
end
test = My_class.new
p test.an_attribute # => "default"
Это прекрасно работает и в основном дает мне || = функциональность.
Итак, не задумываясь, я пошел и написал себе довольно большую функцию, чтобы сделать то же самое с коллекцией (то есть, если в коллекции нет объектов, тогда иди и выясни, какими они должны быть)
class My_class < ActiveRecord::Base
def things
thngs = super
if thngs.empty? #we've got to assemble the this collection!
self.other_things.each do |other_thing| #loop through the other things
#analysis of the other_things and creation and addition of things
self.things << a_thing_i_want
end
else #just return them
thngs
end
end
end
test = My_class.new
test.other_things << other_thing1
test.other_things << other_thing2
p test.things # => METHOD ERROR ON THE 'super' ARGH FAIL :(
К сожалению, это не получается. Есть идеи для решения? Я не думаю, что расширения - правильное решение здесь
Попытка до сих пор:
super
-> 'method_missing': super: no superclass method
self[:things]
-> test.things.each
генерирует ошибку nilClass
Потенциальное решение:
Было бы переименовать столбец таблицы и ассоциацию has_many с things
до priv_things
. Это позволило бы мне просто создать метод things
и использовать self.priv_things
вместо super