【问题标题】:How do I permit params for my active admin resource with a has_many_through association?如何通过关联允许我的 activeadmin 资源的参数与 has_many?
【发布时间】:2021-01-29 00:09:26
【问题描述】:

我在活动管理员中设置允许的参数时遇到问题。文档说“任何发送多个值(例如 HABTM 关联或数组属性)的表单字段都需要将空数组传递给 permit_params”。这是我来自 admin/sample.rb 的代码:

ActiveAdmin.register Sample do
  permit_params :title, :description, :file_type, :audio_data, :channels, :sample_rate, :file_size,
    categories: []
end

当我尝试此操作时,所有属性都会出现在我的活动管理表中,但categories 没有任何属性。我不确定我哪里出错了。我也尝试过category_idssample_categories,但它仍然没有显示在表格中。我也尝试向数组添加属性,例如categories: [:name],但仍然没有。

应用程序本身的一切行为都应如此,例如,我可以在创建sample 时添加一个类别。关于如何解决这个问题的任何建议?这是一些相关的代码。

models/sample.rb

class Sample < ApplicationRecord
  ...
  has_many :sample_categories
  has_many :categories, through: :sample_categories
end

models/category.rb

class Category < ApplicationRecord
  has_many :sample_categories
  has_many :samples, through: :sample_categories
end

models/sample_category.rb

class SampleCategory < ApplicationRecord
  belongs_to :sample
  belongs_to :category
end

控制器/samples_controller.rb

...
def sample_params
    params.require(:sample).permit(:title, :description, :audio, :file_type, :file_size, :sample_rate, :channels, :tag_list, category_ids: [])
end
...

【问题讨论】:

  • 如果 ActiveAdmin 正在使用集合助手,则该参数几乎可以肯定称为 category_idscategory_ids: [] 将允许 any permitted scalar value。您应该能够通过查看呈现的表单或请求参数来检查这一点。

标签: ruby-on-rails ruby activeadmin


【解决方案1】:

您是否在Sample 模型中尝试过accepts_nested_attributes_for 功能?

class Sample < ApplicationRecord
  ...
  has_many :sample_categories
  has_many :categories, through: :sample_categories

  accepts_nested_attributes_for :categories
end

如果可行,请先尝试使用 test 或 rails 控制台。

另外请更新您的admin/sample.rb 以允许nested attributes 来自categories

ActiveAdmin.register Sample do
  permit_params :title, :description, :file_type, :audio_data, :channels, :sample_rate, :file_size,
    categories_attributes: [:id, :name, :etc]
end

注意: 如果您使用的是活动管理员,则不需要 samples_controller.rb CRUD 控制器声明

【讨论】:

    猜你喜欢
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    相关资源
    最近更新 更多