我在应用程序中使用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”等,然后使用各个用户模型来存储每个用户组唯一的属性。我在主要用户表和三个用户组表之间使用一对一关系。
在这里(请注意,我没有在用户组表中显示所有属性):
问题在于,使用Active Admin不能很好地解决问题。在视图中,我必须创建一个用户,然后在不同的视图中分配父母和学生。我希望有一个单一的表单,例如,可以将学生的用户记录与主用户表中的属性以及学生表中的唯一属性一起放入,而无需转到多个模型视图来完成记录。太令人费解了。
有没有一种方法可以在一个视图中呈现来自不同模型的输入?即在学生中,“用户”表中有“名”,“姓” ...以及学生特有的输入?
如果您采用的方法是我在这里采取的方法,那么您会采用哪种方法?我什至不确定我是否正确地进行了关联。实际上,我什至不确定这是否是最有效的方法。
我正在使用枚举来分配角色。
将不胜感激这里的任何指导。谢谢。
Student
s,Guardian
s和Teacher
s都是User类型。为什么不将它们合并为单个类型并使用继承将它们表示为普通类型呢?
class User < ActiveRecord::Base
# ...
end
class Teacher < User
# ...
end
class Guardian < User
# ...
end
class Student < User
# ...
end
您将需要type
通过迁移添加一列,还需要编写一个任务将它们合并到一个通用表中,但这很值得。
请参见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
然后form
在admin/user.rb
()中添加一个自定义:
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
如果您使用的参数很强,请确保将User,guardian_attributes等的适当参数列入白名单。
我认为,这里的嵌套非常丑陋,拥有这种规范化的架构将很难维护和查询。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句