我正在尝试在 Rails 中创建自定义表单构建器来转换此代码
<div class="row collapse">
<div class="large-4 columns">
<%= builder.label :vacancy_title, "Title of the Vacancy", class: "right inline" %>
</div>
<div class="large-8 columns">
<%= builder.text_field :vacancy_title, class: "tiny" %>
</div>
</div>
简单到
<%= builder.t_field :vacancies, "Label title" %>
我正在尝试这段代码,但没有运气,它只显示标签。
#form_builders/custom_form_builder.rb
class CustomFormBuilder < ActionView::Helpers::FormBuilder
def t_field(name, title, *args)
@template.content_tag :div, class: "row collapse" do
@template.content_tag :div, class: "large-8 columns" do
text_field_tag(name, *args)
end
@template.content_tag :div, class: "large-4 columns" do
@template.content_tag :h5 do
label(title, options[:label], class: "right inline")
end
end
end
end
text_field_tag(name, *args) 显然有问题,但我不知道如何声明输入。我在 rubyapi Helpers::FormBuilder 上找不到任何文档
解决了
感谢 Levi Stanley,我用下面的代码解决了这个问题。我需要更改text_field_tag(name, *args)
withtext_field_tag("#{object_name}[#{name}]")
和label(title, options[:label], class: "right inline")
withlabel(name, title, *args, class: "right")
以使表单与嵌套属性一起正常工作。
class LabeledFormBuilder < ActionView::Helpers::FormBuilder
def t_field(name, title, *args)
@template.content_tag :div, class: "row collapse" do
(@template.content_tag :div, class: "large-4 columns" do
@template.content_tag :h5 do
label(name, title, *args, class: "right")
end
end) +
(@template.content_tag :div, class: "large-8 columns" do
@template.text_field_tag("#{object_name}[#{name}]")
end)
end
end
end