我有模型User和model Recruiter。目前,这是两个单独的表,但我想让它们成为一个。
电流:
理想:
我了解STI的基础知识。我想知道的是,当我在新 Recruiter控制器(继承自User)上执行方法时,如何确保我的所有方法都在调用只是招聘人员的用户?因此,根据...... SELECT * FROM users WHERE role = 'recruiter'
查询所有内容。
答案 0 :(得分:1)
这是rails为您提供的,开箱即用的东西。您不必手动查询特定类型的用户,只需查询正确的模型。
我还必须提一下,默认情况下,rails会假设您的 sti_column 被称为type
,但可以轻松地重写为role
。
答案 1 :(得分:1)
让我们承认你有两个班级:
class User < ActiveRecord::Base
end
class Recruiter < User
end
Rails会在用户表格中自动添加类型列,以便在您的控制器中执行以下操作:
class RecruitersController < ApplicationController
def index
@recruiters = Recruiter.all
end
end
Rails将使用 type ='Recruiter'自动获取记录,您甚至无需手动设置。如果你这样做:
Recruiter.new(name: 'John').save
将在数据库中创建一个新用户,类型字段设置为'招聘者'。
答案 2 :(得分:1)
你会定义你的模型:
class User < ActiveRecord::Base
...
end
class Recruiter < User
...
def initialize
# ... special initialization for recruiters / you could put it here
super
end
...
end
并创建一个新的招聘人员,你会这样做:
Recruiter.create(:name => "John Smith")
并且由于STI用户表中的type
属性(设置为'招聘人员'),记录将由招聘人员完成。
您可以将STI模型的特殊初始化放在模型的初始化程序中,或者在if-cascade检查类型的过滤器中。 初始化程序可能更清晰。
答案 3 :(得分:0)