Я подозреваю, что проблема в том, что вам не хватает s после генератора. Правильный вызов метода:
Rails::Generators::GeneratedAttribute.new
Вместо того чтобы создавать переменную атрибутов внутри шаблона, лучше создать ее внутри класса генератора в методе initialize. Этот метод выглядит как скелет:
def initialize(*args, &block)
super
# Call Rails::Generators::GeneratedAttribute.new here
end
Если вы заставляете своего пользователя передавать нужные атрибуты в форме column_name: column_type, тогда вы можете сделать следующее:
class FooGenerator < Rails::Generators::NamedBase
argument :model_attributes, type: :array, default: [], banner: "model:attributes"
def initialize(*args, &block)
super
@attributes = []
model_attributes.each do |attribute|
@attributes << Rails::Generators::GeneratedAttribute.new(*attribute.split(":")) if attribute.include?(":")
end
end
end
Возможно, вы захотите также учесть возможность того, что никакие атрибуты не будут каким-либо образом переданы. Однако это будет зависеть от ваших потребностей, поэтому я не могу наставить вас в этом без дополнительной информации. Извините!
Хороший стандарт для подражания - источник nifty_generators .