我有一個帶有大量字段(112)的導軌模型,用於加載配置。我希望在編輯和展示形式中只顯示,如果該字段已填充。也就是說,如果數據庫中的字段爲null,則不要顯示它以進行編輯。Rails:使用simple_form遍歷屬性
有兩個記錄 - 主要是批次,並且與Primer3Batch類有1:1的關係。我試圖在批量顯示操作上對Primer3Batch類進行編輯,我不確定這是一個好主意還是甚至可以工作。
我已經使用屬性方法試圖和正在此錯誤:
undefined method `attributes' for #<SimpleForm::FormBuilder
batches_controller.rb
def show
@batch = Batch.find(params[:id])
@primer3 = Primer3Batch.where(:batch_id => @batch.id)[0]
respond_to do |format|
format.html # show.html.erb
format.json { render json: @batch }
end
end
批次/ show.html.erb
<h1>Batch Details: <%= @batch.id %></h1>
<%= simple_form_for(@primer3) do |f| %>
<%= f.error_notification %>
<div class="form-inputs">
<% f.attributes.each_attribute do |a| %>
<% if a %><%# if a is not nil %>
<%= f.input a %><%# send the field to the form %>
<% end %>
<% end %>
</div>
<div class="form-actions">
<%= f.button :submit %>
</div>
<% end %>
編輯
謝謝JSWorld您指出使用實例變量的錯誤。我已經糾正它,似乎進一步,但它仍然不完全正確。這是行更改 - 注意屬性。每個爲屬性。每個屬性不起作用。
<% @primer3.attributes.each do |a| %>
現在我得到的表單字段的錯誤:
undefined method `["id", 110]' for #<Primer3Batch:
我想我需要以某種方式把這個:
a ["id", 110]
到:
<%= f.input :id %>
*編輯2 *
最終的代碼塊基於IIya Khokhryakov的答案。
<%= simple_form_for(@primer3) do |f| %>
<%= f.error_notification %>
<div class="form-inputs">
<% @primer3.attributes.each_pair do |name, value| %>
<%= f.input name if value %>
<% end %>
</div>
<div class="form-actions">
<%= f.button :submit %>
</div>
<% end %>
我試過上面的form_for也是我得到了同樣的錯誤。 – ardochhigh