Ответ 1
super
выше переданы все параметры (см. этот недавний вопрос).
Как указано в сообщении об ошибке, вы должны здесь "явно указать все аргументы". Замените super
на super(label, *args)
.
Большинство из вас уже должно знать прагматическую книгу "Agile web dev с рельсами" (третье издание). На странице 537 - 541 он имеет код "Custom Form Builders" следующим образом:
class TaggedBuilder < ActionView::Helpers::FormBuilder
# <p> # <label for="product_description">Description</label><br/> # <%= form.text_area 'description' %> #</p>
def self.create_tagged_field(method_name)
define_method(method_name) do |label, *args|
@template.content_tag("p" , @template.content_tag("label" , label.to_s.humanize,
:for => "#{@object_name}_#{label}") + "<br/>" + super)
end
end
field_helpers.each do |name|
create_tagged_field(name)
end
end
Этот код не работает с Ruby 1.9.1. Он возвращает ошибку следующим образом:
неявный перенос аргумента super из метода, определенного define_method(), не поддерживается. Укажите все аргументы явно. (ActionView:: TemplateError)
Мой вопрос: что я должен изменить в коде, чтобы исправить это?
Спасибо
super
выше переданы все параметры (см. этот недавний вопрос).
Как указано в сообщении об ошибке, вы должны здесь "явно указать все аргументы". Замените super
на super(label, *args)
.
Я столкнулся с этой проблемой в define_method без аргументов
define_method :"#{info_type}_info" do
info = super
.......
end
И все-таки нашел эту проблему. Я должен был явно указать скобки:
define_method :"#{info_type}_info" do
info = super()
.......
end