В моей модели я пытаюсь динамически выставлять объекты, находящиеся внутри массива, как атрибут верхнего уровня. Вот фрагмент кода:Значение привязки к ruby define_method
class Widget < ActiveRecord::Base
# attr_accessor :name
end
class MyModel < ActiveRecord::Base
has_many :widgets
#attr_accessor :widgets
after_initialize :init_widgets
def init_widgets
widgets
widgets.each_with_index do |widget, index|
define_method(widget.name) do
widgets[index]
end
end
end
end
Есть ли способ для меня, чтобы определить значение индекса в новый метод я создаю так, что он будет связан с соответствующим индексом?
Могут быть лучшие способы делать вещи. Если вы ссылаетесь на 'has_many: widgets' как' array', то это должно быть исправлено. Во-вторых, я бы не советовал вашему блоку 'after_initialize', что он делает, потому что' after_initialize' получает всюду, инициализацию, поиск Active Record и т. Д. Не могли бы вы добавить дополнительную информацию к своей проблеме? – vee
По умолчанию вы можете получить доступ к файлам 'my_model.widgets [0]', 'my_model.widgets [1]', 'my_model.widgets.last' и т. Д. - что-то не хватает в этом способе делать что-то? –