【问题标题】:activeadmin rails 4 understanding how to create custom formsactiveadmin rails 4 了解如何创建自定义表单
【发布时间】:2014-03-31 13:03:41
【问题描述】:

我是 activeadmin / formtastic 的新手,我在理解事情的运作方式时遇到了一些麻烦。我通读了有关如何使用 formtastic 创建表单的文档,但我似乎仍然遇到问题,我确信我不了解事情是如何工作的。

我正在创建一个与博客应用程序非常相似的讨论应用程序,最终结果是我想为管理员创建一个界面,以便将 cmets 添加到讨论中,而无需进入用户界面。

我的出发点是 activeadmin 提供的管理部分中的讨论视图。我正在尝试处理添加评论表单。根据说明,我应该可以使用

添加表单
form partial: 'new_admin_comment_form', locals {discussion_comment: DiscussionComment.new}

然后我应该在 app/views/admin/discussions 文件夹中创建这个部分。我已经这样做了,并输入了一些任意文本以确保部分渲染并且确实如此。但是一旦我开始添加代码,我就无法显示表单。

我正在使用的当前代码是:

<%= semantic_form_for [:admin, discussion_comment] do |f| %>
    <%= f.inputs, :body %>
    <%= f.actions %>
<% end %>

所以我有几个问题我无法在文档中找到:

  1. 在哪里创建要在表单中使用的实例变量?我一直在 activeadmin 文件中设置这些,这让我很困扰。
  2. 如何传递参数?我以为我可以正常执行此操作,但是当我尝试使用 查看它们时,即使我应该至少拥有父表单中的 id,它也是空的。即使使用 locals: {id: params[:id]},部分的 id 也是空的。
  3. 调试我的表单为什么没有出现的最佳方法是什么?如果情况变得更糟,我可以使用常规 ERB 吗?

【问题讨论】:

    标签: ruby-on-rails forms activeadmin


    【解决方案1】:

    您可以在没有自定义表单的情况下执行此操作。如果你坚持使用活跃的管理 DSL,你可以使用它的 has_many 方法。此处示例:

    http://www.activeadmin.info/docs/5-forms.html

    您的讨论模型应如下所示

    class Discussion < ActiveRecord::Base
    
        has_many :discussion_comments
        accepts_nested_attributes_for :discussion_comments, allow_destroy: true
    end
    

    【讨论】:

    • 我尝试修改示例时出现以下错误:
    • 以下链接显示了我在添加 has_many 表单时得到的当前错误:pastebin.com/tpHiz2MC 下面的链接是我在 admin/discussion.rb 中作为表单放入的内容。根据示例,这看起来就是我所需要的。 pastebin.com/xvnMRaif 如果我了解 has_many 在 DSL 中的工作原理,我假设它正在查看我的讨论模型,看看我是否有一个 has_many :discussion_cmets 行。 pastebin.com/zDAm8F4g 看起来很简单,但我似乎无法弄清楚我错过了什么。
    • 好的,我的问题与将表单放入显示块有关。这就是导致错误的原因。但有趣的是,我没有收到错误消息,但我没有看到任何用于创建新评论的表单字段。
    • 好的,看来我正在为自己创造更多的工作。使用 show 块删除了添加其他表单的能力(似乎)。我当前的 admin/discussion.rb 文件如下所示:pastebin.com/jfjgsSkg。显示块显示但表单没有。原来我根本不需要 show 块,因为我默认获得了 cmets 表单。我使用 show 块的唯一原因是渲染部分关联的 cmets。我似乎无法找到如何做到这一点,因为在 show 之外使用 render 会出现错误并且 form :partial 不显示(假设它不是表单。)
    • 好的,所以这也不对。评论部分看起来只是内部的,与之前认为的讨论 cmets 无关。所以在这一点上,我不知道为什么相关表的表单输入没有显示以及如何渲染部分以列出这些相关的 cmets。在这一点上,这就是我在 admin/discussion.rb pastebin.com/qRW2u3JM 中的全部内容。我删除了渲染,因为它没有太多意义,除非我可以使用 has_many 表单在此视图中创建 cmets。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-04
    • 2014-02-14
    • 2014-04-07
    相关资源
    最近更新 更多