外键在 rails 项目中的 activeadmin 中不起作用

Jin*_*ong 1 ruby ruby-on-rails activeadmin

我在 rails 项目的 activeadmin 中遇到了一个奇怪的问题。
我创建了新的 rails 项目和两个表,如下所示。

rails g model category title:text

rails g model subcategory category:references title:text
Run Code Online (Sandbox Code Playgroud)

子类别属于具有外键“category_id”的类别,通过引用关键字。我已将类别和子类别模型更改如下。

class Category < ActiveRecord::Base
    has_many :subcategories, dependent: :destroy
end
Run Code Online (Sandbox Code Playgroud)

class Subcategory < ActiveRecord::Base
  belongs_to :category
  default_scope -> { order(created_at: :desc) }
end
Run Code Online (Sandbox Code Playgroud)

我在 Gemfile 中添加了 activeadmin gem 并安装了。

ActiveAdmin.register Category do

    permit_params :title

end

ActiveAdmin.register Subcategory do

    permit_params :category_id, :title

end
Run Code Online (Sandbox Code Playgroud)

我登录成功。
我添加了新类别。如果我单击子类别以创建新的子类别,类别项会带来像图像这样的错误。 在此处输入图片说明

我想显示我添加的类别。此致。

x6i*_*iae 5

那不是错误。

这些是类别对象。现在由您决定要显示的类别对象的哪个属性。名称?,描述?

你可以有一个像这样的表格:

ActiveAdmin.register Subcategory do
  permit_params :name, :description, :category_id

  form do |f|
    f.semantic_errors *f.object.errors.keys

    f.inputs "Details" do
      f.input :name
      f.input :description
      f.input :category_id, :as => :select, :collection => Category.all.collect {|category| [category.name, category.id] }
    end
    f.actions
  end
end
Run Code Online (Sandbox Code Playgroud)

注意这一行: f.input :category_id, :as => :select, :collection => Category.all.collect {|category| [category.name, category.id] }

我是说用所有现有类别填充子类别字段,显示它们的名称,并使用它们的 ID。

希望这可以帮助。