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

时间:2016-04-30 18:58:34

标签: ruby-on-rails database devise activeadmin models

我在我的应用程序中使用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”等,然后使用各个用户模型存储对于每个用户组。我在主用户​​表和三个用户组表之间使用一对一的关系。

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

enter image description here

问题是Active Admin无法解决这个问题。在视图中,我必须创建一个用户,然后在不同的视图中分配父级和学生。我希望有一个单独的表单,例如,学生的用户记录可以放入主用户表中的属性以及学生表中的唯一属性,而无需转到多个模型视图来完成记录。这太复杂了。

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

如果你采取的方法,我会采取什么方法你会遵循?我甚至不确定我正在做正确的协会。事实上,我甚至不确定这是否是最有效的方法。

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

感谢此处的任何指导。感谢。

1 个答案:

答案 0 :(得分:0)

Student s,GuardianTeacher都是用户类型。为什么不将它们合并为单一类型并使用继承将它们表示为常见类型?

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等的相应参数列入白名单。

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