Ruby on rails RubyonRails、用户模型和活动管理查询

Ruby on rails RubyonRails、用户模型和活动管理查询,ruby-on-rails,database,devise,activeadmin,models,Ruby On Rails,Database,Devise,Activeadmin,Models,我正在我的应用程序中使用Active Admin 该应用程序有一个用户模型(Desive),但我有3个用户组-家长、教师和学生。每个都有自己的模型 e、 g 我在这里试图做的是在用户模型中存储跨用户组的相同属性,例如“名字、姓氏、电子邮件”等,然后使用各个用户模型存储每个用户组特有的属性。我在主用户表和三个用户组表之间使用一对一关系 此处(注意,我没有显示用户组表中的所有属性): 问题是,这是不工作的积极管理这么好。在视图中,我必须创建一个用户,然后在不同的视图中分配一个家长和一个学生。我希望

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

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

e、 g

我在这里试图做的是在用户模型中存储跨用户组的相同属性,例如“名字、姓氏、电子邮件”等,然后使用各个用户模型存储每个用户组特有的属性。我在主用户表和三个用户组表之间使用一对一关系

此处(注意,我没有显示用户组表中的所有属性):

问题是,这是不工作的积极管理这么好。在视图中,我必须创建一个用户,然后在不同的视图中分配一个家长和一个学生。我希望有一个表单,例如,学生的用户记录可以与主用户表中的属性以及学生表中的唯一属性一起放入,而无需转到多个模型视图来完成记录。太复杂了

有没有办法在一个视图中渲染来自不同模型的输入?i、 在学生中,用户表中有“名字”、“姓氏”以及学生特有的输入

如果你采取我在这里采取的方法,你会采取什么方法?我甚至不确定我做得对不对。事实上,我甚至不确定这是最有效的方法

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


请在此提供指导。谢谢。

学生
s、
监护人
s和
老师
s都是一种用户类型。为什么不将它们合并到一个类型中,并使用继承将它们表示为一个公共类型呢

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

class Teacher < User
  # ...
end

class Guardian < User
  # ...
end

class Student < User
  # ...
end
然后在
admin/user.rb
()中添加自定义
表单

如果您使用的是强参数,请确保将用户、监护人属性等的相应参数列入白名单


在我看来,这里的嵌套非常难看,拥有这种规范化的模式将很难维护和查询

Student
s、
Guardian
s和
Teacher
s都是一种用户类型。为什么不将它们合并到一个类型中,并使用继承将它们表示为一个公共类型呢

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

class Teacher < User
  # ...
end

class Guardian < User
  # ...
end

class Student < User
  # ...
end
然后在
admin/user.rb
()中添加自定义
表单

如果您使用的是强参数,请确保将用户、监护人属性等的相应参数列入白名单


在我看来,这里的嵌套非常难看,拥有这种规范化的模式将很难维护和查询

嗨,谢谢,我以前试过STI,但有几个消息来源警告不要为此目的使用STI?结果比现在好一些,但我有点害怕。STI是否是一种安全可靠的方法?缺点是存在一些冗余——表中的某些字段仅适用于某些用户类型(例如学生上的
class\u id
)。但我认为这是一个很小的代价。这些不同类型用户的行为、视图和控制器是否存在重叠?如果是这样,我会认真考虑使用一个表来表示这些用户模型。我更新了我的非STI方法的答案,你必须在你的表单中使用<代码> NeestddPARAMS < /Cord>。非常感谢。有一些重叠,但不是很多。我会给你的选择STI一个尝试。如果不合适,我不介意在STI再试试。非常感谢您的帮助。是的,这是因为您没有将允许的参数列入白名单:嗨,谢谢,我以前尝试过STI,但有几位消息人士警告不要为此使用STI?结果比现在好一些,但我有点害怕。STI是否是一种安全可靠的方法?缺点是存在一些冗余——表中的某些字段仅适用于某些用户类型(例如学生上的
class\u id
)。但我认为这是一个很小的代价。这些不同类型用户的行为、视图和控制器是否存在重叠?如果是这样,我会认真考虑使用一个表来表示这些用户模型。我更新了我的非STI方法的答案,你必须在你的表单中使用<代码> NeestddPARAMS < /Cord>。非常感谢。有一些重叠,但不是很多。我会给你的选择STI一个尝试。如果不合适,我不介意在STI再试试。非常感谢您的帮助。是的,这是因为您没有将允许的参数列入白名单:
class User < ActiveRecord::Base 
  accepts_nested_attributes_for :teacher
  accepts_nested_attributes_for :guardian
  accepts_nested_attributes_for :student
end
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