首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带条件的单表继承

带条件的单表继承
EN

Stack Overflow用户
提问于 2013-05-08 17:42:58
回答 4查看 312关注 0票数 1

我有模范用户和模特招聘人员。目前,这两张桌子是分开的,但我想把它们做成一张。

当前:

  • 用户: id,用户名,密码,名称
  • 招聘人员: id,user_id

理想:

  • 用户: id,用户名,密码,角色(招聘人员,管理员)

我了解STI的基本知识。我想知道的是,当我在新的招聘者控制器(从用户继承)上执行方法时,如何确保我的所有方法都在调用仅为招聘人员的用户?因此,类似于…的查询。一切都是SELECT * FROM users WHERE role = 'recruiter'

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-05-08 17:46:24

这是rails为您提供的服务,不受限制。您不必手动查询特定类型的用户,只需查询正确的模型。

我还必须指出,在默认情况下,rails假定您的sti_column称为type,但是可以轻松地将其重写为role

票数 1
EN

Stack Overflow用户

发布于 2013-05-08 17:52:53

让我们承认你有你的两门课:

代码语言:javascript
运行
复制
class User < ActiveRecord::Base
end

class Recruiter < User
end

Rails将自动在用户表中添加一个类型的列,以便在控制器中执行如下操作:

代码语言:javascript
运行
复制
class RecruitersController < ApplicationController
  def index
    @recruiters = Recruiter.all
  end
end

Rails将使用=‘招聘者’自动获取记录,您甚至不必手动设置它。如果你这样做了:

代码语言:javascript
运行
复制
Recruiter.new(name: 'John').save

将在数据库中创建一个新用户,将字段类型设置为‘招聘者’

票数 1
EN

Stack Overflow用户

发布于 2013-05-08 17:53:38

您可以定义模型,如下所示:

代码语言:javascript
运行
复制
 class User < ActiveRecord::Base
   ...
 end

 class Recruiter < User
 ...
   def initialize
     # ... special initialization for recruiters / you could put it here
     super
   end
 ...
 end

要创建一个新的招聘人员,您可以这样做:

代码语言:javascript
运行
复制
 Recruiter.create(:name => "John Smith")

而且,由于STI用户表中的type属性(设置为“招聘者”),记录将是招聘人员的记录。

您可以将STI模型的特殊初始化放在模型的初始化器中,或者放在带有if级联检查类型的前置过滤器中。初始化器可能要干净得多。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16446986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档