【问题标题】:Active Admin form: has_many inputs in separate panels by condition活动管理员表单:按条件在单独面板中输入 has_many
【发布时间】:2018-12-04 17:16:05
【问题描述】:

我正在尝试使用 active admin 和 formtastic 创建一个表单,其中特定类型的评论在单独的面板上进行编辑,目前我通过 .html.erb 部分呈现面板,如下所示:

<div class="panel">
  <h3>Admin Reviews</h3>
  <div class="panel_contents">
    <div>
      <% f.has_many :reviews, heading: false, new_record: true, allow_destroy: false do |review| %>
        <% next unless review.object.reviewer_type === "Admin" %>
        <%= render partial: "admin/admin_reviews", locals: { r: review } %>
        <% review.input :_destroy, :as => :boolean, :label => "Delete" %>
      <% end %>
    </div>
  </div>
</div>

<div class="panel">
  <h3>Reviews</h3>
  <div class="panel_contents">
  <div>
    <% f.has_many :reviews, heading: false, new_record: true, allow_destroy: false do |review| %>
       <% next if review.object.reviewer_type === "Admin" %>
       <%= render partial: "admin/form_reviews", locals: { r: review } %>
       <% review.input :_destroy, :as => :boolean, :label => "Delete" %>
    <% end %>
  </div>
</div>

但我更愿意做一些事情,比如摆脱为每个审查生成的空白 div 被迭代属于另一个面板 (blank div):

<div class="panel">
  <h3>Admin Reviews</h3>
  <div class="panel_contents">
    <div>
      <% admin_reviews = Review.where(reviewer_type: "Admin") %>
      <% f.has_many admin_reviews, heading: false, new_record: true, allow_destroy: true do |review| %>
        <%= render partial: "admin/admin_reviews", locals: { r: review } %>
      <% end %>
    </div>
  </div>
</div>

<div class="panel">
  <h3>Reviews</h3>
  <div class="panel_contents">
  <div>
    <% reviews = Review.where.not(reviewer_type: "Admin") %>
    <% f.has_many reviews, heading: false, new_record: true, allow_destroy: true do |review| %>
       <%= render partial: "admin/form_reviews", locals: { r: review } %>
    <% end %>
  </div>
</div>

上述方法不起作用,但我希望它能够传达出我对没有空白 div 的更简洁解决方案的需求,而我正在考虑用 javascript 隐藏它们。

【问题讨论】:

    标签: html ruby-on-rails-5 activeadmin has-many-through formtastic


    【解决方案1】:
    <div class="panel">
      <h3>Reviews</h3>
        <div class="panel_contents">
          <div>
            <% f.has_many :reviews, for: [:reviews, f.object.non_admin_reviews], heading: false, new_record: true, allow_destroy: true do |review| %>
              <%= render partial: "admin/tutors/form_tutor_reviews", locals: { r: review } %>
            <% end %>
         </div>
       </div>
    </div>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-07
      • 2011-08-13
      • 1970-01-01
      • 1970-01-01
      • 2012-11-08
      • 1970-01-01
      • 1970-01-01
      • 2021-09-16
      相关资源
      最近更新 更多