我想通过帮助程序定义两种表单字段类型(f.text_field
或f.text_area
):
def helper_thing(tagtype, field_id)
tagtype("#{field_id}", class: 'input-group-field')
end
我想在视图中使用tagtype
作为表单文本助手的变量(使用haml):
= helper_thing(f.text_field, 'random_id')
我希望输出结果如下:
f.text_field('random_id')
我总是得到一个错误,说“1 ... 3的args 0的无效数量”,这实际上导致我的其余参数失败。为了简洁起见,我在我的例子中只使用了一个参数。
我正在尝试做什么?
答案 0 :(得分:2)
是的,可能:
def helper_thing(form, tagtype, field_id)
form.send(tagtype, "#{field_id}", class: 'input-group-field')
end
呼叫:
= helper_thing(f, :text_field, 'random_id')
您尝试的问题是您尝试传入f.text_field
,这是text_field
方法在f
上调用而没有参数。由于所述方法需要1-3个参数,因此最终会出现您所看到的错误。
答案 1 :(得分:0)
除了Michael Kohls的优秀答案之外,还有一种方法可以在不改变方法签名的情况下完成此任务。
由于parens在Ruby中是可选的,因此所有对象都有一个特殊的method
方法,如果你想要一个方法的引用,可以使用它 - 不用调用它:
= helper_thing(f.method(:text_field), 'random_id')
然后在传递的Method对象上使用.call
:
def helper_thing(tagtype, field_id)
tagtype.call("#{field_id}", class: 'input-group-field')
end