gpt4 book ai didi

ruby-on-rails - 如何在 Rails Admin 编辑表单中显示虚拟属性

转载 作者:行者123 更新时间:2023-12-02 16:58:21 25 4
gpt4 key购买 nike

我的用户和站点具有 has_many through 关系(SiteUser 是查找表,某些角色逻辑和邀请逻辑取决于此)。我正在使用 Devise Invitable 来允许网站所有者邀请其他用户在他们的网站上进行协作。 (在我的案例中,站点是组织的同义词)。

但我还需要允许管理员用户(使用 Rails Admin)邀请用户访问任何站点。前端 UI 中的站点所有者只能邀请用户访问他们自己的站点。但是管理员用户是整个应用程序范围内(不仅仅是站点范围内)的管理员用户,他们需要能够邀请用户访问任何站点。

根据我已经实现的代码,在 Rails Admin 中,有一个用于创建新的 SiteUser 的表单:

enter image description here

我可以在这里创建 site_user。但是在编辑 site_user 时,它不会显示电子邮件地址。这是因为 emailuser 上的字段,而不是 site_user 上的字段。如何让 rails_admin 在 site_user 记录中显示 user 电子邮件(给定它们之间的关系)?

enter image description here

我将分享我为 SiteUserUser 编写的代码,这样有助于理解:

class SiteUser < ActiveRecord::Base
include RoleModel
roles :ad_settings, :reporting, :video, :payment, :owner

belongs_to :site
belongs_to :user

before_validation :set_user_id, if: ->() { email != nil }

attr_accessor :email

after_create :assign_owner, if: ->() { site.users.count == 1 }

def set_user_id
existing_user = User.find_by(email: email)

self.user = if existing_user.present?
UserMailer.notify_existing_user(site, existing_user).deliver_now unless Rails.env.test?
existing_user
else
User.invite!(email: email, invite_site_name: self.site.title)
end
end

def name
user.title
end

def assign_owner
roles << :owner
end

rails_admin do
object_label_method :email
show do
field :email
field :site
field :roles
end
edit do
field :site
field :email
field :roles, :integer do
partial :site_user_role_select
end
end
end
end

用户的相关代码:

class User < ActiveRecord::Base
acts_as_token_authenticatable

attr_accessor :invite_site_name

devise :authy_authenticatable, :database_authenticatable, :lockable, :registerable,
:recoverable, :rememberable, :trackable, :validatable, :invitable

include RoleModel
roles :admin, :influencer

has_many :site_users
has_many :sites, through: :site_users

def send_email
if self.invitation_token.nil?
UserMailer.new_user(self).deliver_now unless Rails.env.test?
end
end

def my_sites
admin? ? Site.all : sites
end

def site
@site ||= sites.first
end

def name
title
end

rails_admin do
object_label_method :email
modal do
field :title do
label 'Full Name'
end
field :email
end
edit do
field :title do
label 'Full Name'
end

field :disable_authy do
label 'Two-Factor Auth'
partial :disable_authy
end

field :email
field :roles, :integer do
partial :role_select
end
field :sites
end
list do
field :title do
label 'Full Name'
end
field :email
field :sites
end
end
end

另外,来自 schema.rbsite_users:

  create_table "site_users", force: :cascade do |t|
t.integer "site_id"
t.integer "user_id"
t.integer "roles_mask"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end

TLDR:从 user 获取 email 属性以在关联的 site_user 对象的 rails_admin 中显示的最佳方法是什么?

最佳答案

您发布了大量不必要的信息。

您的问题是:如何在 Rails Admin 编辑表单中显示虚拟属性?(原来的标题是:'Inviting a User to an Organization with Devise Invitable and Rails Admin')

  rails_admin do
edit do
field :email do
read_only true
pretty_value do
bindings[:object].user&.email
end
end
end
end

阅读文档 https://github.com/sferik/rails_admin/wiki/Fields

关于ruby-on-rails - 如何在 Rails Admin 编辑表单中显示虚拟属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55359594/

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