【问题标题】:Forms on partial doesn't render properly部分表单无法正确呈现
【发布时间】:2017-10-04 16:57:45
【问题描述】:

我有一个在 Rails 3.x 和 ActiveAdmin 0.6.6 上运行良好的 Rails 应用程序。但是我想将它升级到 Rails 5 和 ActiveAdmin 1.x。我开始升级过程,首先从 3.x 升级到 4.x,然后升级到 5x,并使用 ActiveAdmin 我用 1.0.0 进行了测试,现在我使用的是 Github 的 master。

在 Rails 版本和 ActiveAdmin 中,应用程序一切正常,但 ActiveAdmin 表单是部分的。

问题如下:

我有一个文件app/admin/menu.rb,它有一个部分views/admin/menus/_form.html.erb。 部分包含菜单的形式。

这是部分内容(views/admin/menus/_form.html.erb):

<%= semantic_form_for [:admin, @menu], builder: ActiveAdmin::FormBuilder do |f| %>
  <% f.inputs 'Campos Menu' do %>
    <% f.input :project if current_admin_user.admin? %>
    <% f.input :title %>
    <% f.input :title_en %>
    <% f.input :item %>
    <% f.input :icon, as: :file %>
  <% end %>
  <% f.inputs 'Submenus' do %>
    <% f.has_many :submenus, heading: '' do |fa| %>
      <% fa.input :title, as: :string %>
      <% fa.input :title_en, as: :string %>
      <% fa.input :kind, as: :select, collection: Submenu.kind_collection %>
      <% fa.input :items_as, as: :select, collection: Submenu.items_as_collection %>
    <% end %>
  <% end %>
  <% f.actions do %>
    <% f.action :submit %>
  <% end %>
<% end %>

这个文件的渲染结果只有“actions”按钮,在本例中是“submit”按钮。有趣的是,如果我从部分中删除&lt;% f.actions do %&gt;...,那么&lt;% f.inputs 'Submenus' do %&gt; 将被渲染,如果我删除后者,则相同。在其他情况下,在包含end 的最后一个块上呈现。

在 Rails 4.x 和 5.x 上观察到相同的行为(Rails 5.1.x 除外,我没有测试过)。

如果我将表单从部分移动到app/admin/menu.rb,它会正确呈现。这对我来说可能是一个解决方案,但是我有其他表单使用 JQuery 进行字段操作和前端的其他内容。

正如我之前所说,所有这些表单部分都在 Rails 3.x 和 ActiveAdmin 0.6.6 上正常工作。

谁知道问题出在哪里?

免责声明:我不是 Rails 或 ActiveAdmin 专家,如果是与此问题相关的愚蠢错误,请多多包涵。

【问题讨论】:

    标签: ruby-on-rails-3 ruby-on-rails-5 activeadmin


    【解决方案1】:

    是的,它是activeadmin#3486 很高兴您找到了解决方法。我很好奇this Arbre branch 是否为您修复了它。很高兴看到人们仍在升级,我会尽我所能提供帮助。

    【讨论】:

    • 嗨,在我的项目中测试这个建议的分支的方法是什么?如何在我的 GemFile 中指定它。无论如何,我为我的问题找到了解决方案,但我不确定它是否是使用表单组件的预期方式,所以我所做的就是在大部分 f. 声明中添加一个 =,即 @ 987654325@。似乎缺少的= 阻止了表单正确呈现。你知道这是一个正确的解决方案还是会导致其他问题?
    • gem 'arbre', git: 'https://github.com/varyonic/arbre.git', branch: '46_rails_tag_helper_with_block_in_arbre_template'
    • 我个人建议顺其自然,使用 .arb partials 而不是 .erb 和 active_admin_form_for resource do |f| ...
    • 我会试一试 abre gem。但是将我所有的部分迁移到 abre 有点复杂。让我们来看看!感谢您的支持。
    【解决方案2】:

    我找到的解决方案是在部分上为&lt;% f.input(s) %&gt; 放置一个=。使用类似 &lt;%= f.inputs ... %&gt; 而不是 &lt;% f.inputs ... %&gt; 的东西可以解决问题。

    【讨论】:

      猜你喜欢
      • 2018-02-14
      • 2014-10-28
      • 1970-01-01
      • 2015-12-14
      • 1970-01-01
      • 1970-01-01
      • 2022-11-12
      • 1970-01-01
      • 2014-03-19
      相关资源
      最近更新 更多