我在我的应用程序中使用Active Admin。
该应用程序有一个用户模型(设计),但我有3个用户组 - 家长,老师和学生。每个人都有自己的模特。
e.g
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无法解决这个问题。在视图中,我必须创建一个用户,然后在不同的视图中分配父级和学生。我希望有一个单独的表单,例如,学生的用户记录可以放入主用户表中的属性以及学生表中的唯一属性,而无需转到多个模型视图来完成记录。这太复杂了。
有没有办法在一个视图中渲染来自不同模型的输入?即学生在“用户”表格中有“名字”,“姓氏”以及学生独有的输入?
如果你采取的方法,我会采取什么方法你会遵循?我甚至不确定我正在做正确的协会。事实上,我甚至不确定这是否是最有效的方法。
我正在使用枚举来分配角色。
感谢此处的任何指导。感谢。
答案 0 :(得分:0)
Student
s,Guardian
和Teacher
都是用户类型。为什么不将它们合并为单一类型并使用继承将它们表示为常见类型?
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等的相应参数列入白名单。
在我看来,这里的嵌套非常难看,并且这种规范化的模式将难以维护和查询。