gpt4 book ai didi

ruby-on-rails - ActiveAdmin 嵌套 has_many

转载 作者:行者123 更新时间:2023-12-04 03:46:09 24 4
gpt4 key购买 nike

考虑以下模型:

class User < ApplicationRecord
accepts_nested_attributes_for :memberships, allow_destroy: true

has_many :memberships, dependent: :destroy
has_many :accounts, through: :memberships
end

class Account < ApplicationRecord
accepts_nested_attributes_for :memberships, allow_destroy: true
accepts_nested_attributes_for :users, allow_destroy: true

has_many :memberships, dependent: :destroy
has_many :users, through: :memberships
end

class Membership < ApplicationRecord
belongs_to :account
belongs_to :user

before_validation { self.role = "admin" if role.blank? }

validates :role, presence: true

pg_enum :role, %i[admin support user]
end

在 ActiveAdmin 中,已经有一个表单可以从现有用户创建帐户和成员(member)资格。看起来像这样:

form do |f|
...
f.inputs do
f.has_many :memberships, heading: false, allow_destroy: true, new_record: "Add existing user" do |m|
m.input :user_id, as: :searchable_select, ajax: { resource: User }
m.input :role, as: :select, label: false, include_blank: false
end
end
...

我想做的是更新表单以允许创建帐户和具有特定角色成员资格的新用户。到目前为止,这是我尝试过的(在与上面相同的表单 block 中):

f.inputs do
f.has_many :users, heading: false, allow_destroy: true, new_record: "Add new user" do |u|
u.input :name
u.input :email, as: :string
u.has_many :memberships, heading: false, allow_destroy: true, new_record: "Add membership" do |m|
m.input :role, as: :select, label: false, include_blank: false
end
end
end

生成的表单:

这行不通。如果我不为用户的成员资格填写角色,这将“起作用”,并且成员资格模型中的 before_validation 将为用户分配角色为 Admin 的成员资格。但是,如果我尝试通过表单向用户添加角色并单击“创建帐户”,则会返回到表单,我会在该表单中看到一条错误消息,指出 Account must exist。这使我相信该表单忽略了我嵌套在 f.has_many :users 下的第二个 has_many

我还尝试通过在 f.has_many :users block 中创建输入来解决这个问题:

u.input :memberships, as: :select, label: "Role", include_blank: false, collection: Membership.roles

这并没有告诉我帐户必须存在,而是忽略了我为角色分配的任何值,创建了用户并为其分配了角色为Admin 的成员资格

我怎样才能做到这一点?

最佳答案

当您通过表单添加时,这是使用 JavaScript that includes before and after creation hooks 执行的我没有示例,但请查看代码,看看是否有帮助。

关于ruby-on-rails - ActiveAdmin 嵌套 has_many,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65119220/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com