Ruby on rails 元编程或其他更好的方式来处理Rails 4中的虚拟视图字段

Ruby on rails 元编程或其他更好的方式来处理Rails 4中的虚拟视图字段,ruby-on-rails,ruby,metaprogramming,Ruby On Rails,Ruby,Metaprogramming,在我的应用程序中,我有大量的虚拟字段。虚拟字段是视图上的输入字段,它驱动控制器中的某些行为,但不存储在数据库中 我实现的解决方案可以工作,但不灵活,并且有很多开销。我想知道是否有更好的办法 我认为: <div class="row"> <div class="col-md-3"> <%= f.input :present_indicatif, :as => :boolean, label: "Présent de l'indicatif", :in

在我的应用程序中,我有大量的虚拟字段。虚拟字段是视图上的输入字段,它驱动控制器中的某些行为,但不存储在数据库中

我实现的解决方案可以工作,但不灵活,并且有很多开销。我想知道是否有更好的办法

我认为:

<div class="row">
  <div class="col-md-3">
    <%= f.input :present_indicatif, :as => :boolean, label: "Présent de l'indicatif", :input_html => { checked: false } %>
  </div>
  <div class="col-md-3">
    <%= f.input :imparfait_indicatif, :as => :boolean, label: "Imparfait de l'indicatif", :input_html => { checked: false } %>
  </div>
  <div class="col-md-3">
    <%= f.input :passe_simple_indicatif, :as => :boolean, label: "Passé simple", :input_html => { checked: false } %>
  </div>
  <div class="col-md-3">
    <%= f.input :futur_anterieur_indicatif, :as => :boolean, label: "Futur", :input_html => { checked: false } %>
  </div>
</div>
理想情况下,我希望将虚拟字段列表存储在一个数组或散列中,并对它们进行迭代以生成erb中的视图字段,同时以干净的方式将它们与实际字段分开


有什么建议吗?

我觉得每个虚拟字段都有一个自定义标签。为什么不创建一个名称和标签数组:

@virtual_fields = [{field:'field_1',label:'Field Number One'},{field:'field_2',label:'Field Number Two'},{field:'field_3',label:'Field Number Three'}]
在你看来

<%virtual_fields.each do |vf|%>
  <div class="col-md-3">
    <%= f.input @model_with_vf.send(vf[:field]), :as => :boolean, label: vf[:label], :input_html => { checked: false } %>
  </div>
<%end%>

:boolean,label:vf[:label],:input_html=>{checked:false}%>

这当然可以进一步抽象,以将字段的实际标签移动到模型中,并具有一个函数,该函数接受字段名并检索标签

在我看来,每个虚拟字段都有一个自定义标签。为什么不创建一个名称和标签数组:

@virtual_fields = [{field:'field_1',label:'Field Number One'},{field:'field_2',label:'Field Number Two'},{field:'field_3',label:'Field Number Three'}]
在你看来

<%virtual_fields.each do |vf|%>
  <div class="col-md-3">
    <%= f.input @model_with_vf.send(vf[:field]), :as => :boolean, label: vf[:label], :input_html => { checked: false } %>
  </div>
<%end%>

:boolean,label:vf[:label],:input_html=>{checked:false}%>
这当然可以进一步抽象,以将字段的实际标签移动到模型中,并具有一个函数,该函数接受字段名并检索标签