Переопределение методов коллекции ActiveRecord (ассоциации) - PullRequest
0 голосов
/ 08 января 2012

Я новичок в 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...