我有模范用户和模特招聘人员。目前,这两张桌子是分开的,但我想把它们做成一张。
当前:
理想:
我了解STI的基本知识。我想知道的是,当我在新的招聘者控制器(从用户继承)上执行方法时,如何确保我的所有方法都在调用仅为招聘人员的用户?因此,类似于…的查询。一切都是SELECT * FROM users WHERE role = 'recruiter'
。
发布于 2013-05-08 17:46:24
这是rails为您提供的服务,不受限制。您不必手动查询特定类型的用户,只需查询正确的模型。
我还必须指出,在默认情况下,rails假定您的sti_column称为type
,但是可以轻松地将其重写为role
。
发布于 2013-05-08 17:52:53
让我们承认你有你的两门课:
class User < ActiveRecord::Base
end
class Recruiter < User
end
Rails将自动在用户表中添加一个类型的列,以便在控制器中执行如下操作:
class RecruitersController < ApplicationController
def index
@recruiters = Recruiter.all
end
end
Rails将使用=‘招聘者’自动获取记录,您甚至不必手动设置它。如果你这样做了:
Recruiter.new(name: 'John').save
将在数据库中创建一个新用户,将字段类型设置为‘招聘者’。
发布于 2013-05-08 17:53:38
您可以定义模型,如下所示:
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级联检查类型的前置过滤器中。初始化器可能要干净得多。
https://stackoverflow.com/questions/16446986
复制相似问题