Ruby Rails,用户模型和活动管理员查询

Ruby on Rails, User Models and Active Admin query

我在我的应用程序中使用 Active Admin。

该应用程序有一个用户模型 (Devise),但我有 3 个用户组 - 家长、教师和学生。每个都有自己的模型。

例如

student.rb

belongs_to :user

user.rb

has_one :student



parent.rb

belongs_to :user

user.rb

has_one :parent

我在这里尝试做的是在用户模型中存储跨用户组的相同属性 "first_name, last_name, email" 等,然后使用单个用户模型存储独特的属性每个用户组。我在主要用户 table 和三个用户组 table 之间使用一对一关系。

这里(注意我没有显示用户组tables中的所有属性):

问题是使用 Active Admin 时效果不佳。在视图中,我必须创建一个用户,然后在不同的视图中分配一个家长和一个学生。我想要一个单一的表格,例如,可以将学生的用户记录与主要用户 table 的属性以及他们在学生 table 中的独特属性一起放入,而不必转到多个模型视图以完成记录。太绕了。

有没有办法在一个视图中呈现来自不同模型的输入?即在学生中有 "first name"、"last name"...来自用户 table 以及学生独有的输入?

如果你采用我在这里采用的方法,你会采用什么方法?我什至不确定我的联想是否正确。事实上,我什至不确定这是最有效的方法。

我正在使用枚举来分配角色。

在此不胜感激。谢谢

Students、Guardians、Teachers都是User的一种。为什么不将它们合并为一个类型并使用继承将它们表示为一个通用类型呢?

class User < ActiveRecord::Base 
  # ...
end

class Teacher < User
  # ...
end

class Guardian < User
  # ...
end

class Student < User
  # ...
end

您需要通过迁移添加一个 type 列,并编写一个任务将它们合并到一个公共 table,但这可能是值得的。

见 Rails 中的 STI:http://api.rubyonrails.org/classes/ActiveRecord/Inheritance.html

编辑:

如果您不想走 STI 路线,则必须使用嵌套属性

class User < ActiveRecord::Base 
  accepts_nested_attributes_for :teacher
  accepts_nested_attributes_for :guardian
  accepts_nested_attributes_for :student
end

然后在admin/user.rb中添加自定义form():

ActiveAdmin.register User do
  form do |f|
    f.inputs "User Inputs" do
      # ...
      f.input :email
      # ...
    end

    f.inputs "Guardian Attributes", for: [:guardian, f.object.guardian || Guardian.new] do |g|
      g.input :mobile_no
    end

    # Repeat for teacher, Student, etc...
  end
end

如果您使用强参数,请确保将用户、guardian_attributes 等的适当参数列入白名单

在我看来,这里的嵌套非常丑陋,并且拥有这种规范化的模式将难以维护和查询。