Tag: 单表inheritance

如何在Rails中为不同的用户建模

题 我有一个建立了授权和身份validation逻辑的用户模型。 现在我意识到我有三种不同类型的用户。 我想存储关于它们的不同信息。 在Rails中处理这个问题的最佳方法是什么? 基于当前阅读的思考 我看过STI但是从我读过的内容来看它是不合适的,因为我的数据库中会有很多NULL字段。 理想情况下,我不想为三种用户类型中的每一种复制身份validation/授权逻辑。 每个用户在应用程序中也将具有不同的function。

两个模型,一个STI和一个validation

假设我有两张桌子 – 产品和订单。 为简单起见,假设一次只能购买一个产品,因此没有像order_items这样的连接表。 所以关系是产品有很多订单,订单属于产品。 因此,product_id是Order表中的fk。 产品表是STI – 子类是A,B,C。 当用户订购子类产品C时,必须在订单模型字段order_details和order_status上检查两个特殊validation。 对于所有其他Product子类(即A和B),这两个字段可以为nil。 换句话说,当用户购买A和B时,不需要为这两个字段运行validation。 我的问题是: 如何在Order模型中编写validation(可能是自定义?),以便Order模型知道只运行ITS两个字段的validation – order_details和order_status – 当fk_id到Product子类C被保存到orders表时?

在Rails 3.2 App中使用多个模型时,如何使用Devise处理身份validation

我正在使用Rails 3.2应用程序,我使用Devise进行身份validation。 我决定尝试单表inheritance来管理用户角色,但我很快就遇到了问题。 我目前有三个用户模型, User < ActiveRecord , Admin < User和Collaborator < User 。 管理员和协作者共享大多数用户列,但他们的行为和权限略有不同。 我的模特目前看起来像这样: class User < ActiveRecord::Base devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable, :token_authenticatable # Setup accessible (or protected) attributes for your model attr_accessible :email, :name, :password, :password_confirmation, :remember_me before_save :ensure_authentication_token […] end class Admin < User has_one :account, dependent: :destroy […]

如何在rails STI派生模型中禁用validation和回调?

给定一个模型 class BaseModel < ActiveRecord::Base validates_presence_of :parent_id before_save :frobnicate_widgets end 和派生模型(底层数据库表有一个type字段 – 这是简单的rails STI) class DerivedModel < BaseModel end DerivedModel将以良好的OO方式inheritanceBaseModel所有行为,包括validates_presence_of :parent_id 。 我想关闭DerivedModel的validation,并防止回调方法被触发,最好不要修改或以其他方式破坏BaseModel 什么是最简单,最强大的方法?

从Rails中的单表inheritance获取子类的列表/数组?

我有一大堆子类,它们通过我的Rails应用程序中的单表inheritance从父类inheritance。 我想要一种方法来获取从主类inheritance的所有子类的数组。 我尝试了在另一个SO答案中找到的以下单链接命令,但它只返回父类。 ObjectSpace.each_object(class<<MyParentClass;self;end) 有没有干净的方法来做到这一点? 编辑:显然Rails只在惰性模式下调用延迟加载子类,并且可能根据Rails版本生成。 但是,第一个答案应该适用于Prod模式下的Rails 3.1及更高版本。

MySQL / Rails性能:一个表,多行与多表,少行?

在我的Rails应用程序中,我有几个处理资产的模型(附件,图片,徽标等)。 我正在使用attachment_fu,到目前为止,我有3个不同的表来存储我的MySQL数据库中的信息。 我想知道如果我使用STI并将所有信息放在一个表中,使用类型列并具有不同的inheritance类,它是否会对性能产生影响。 它会更干燥,更容易维护,因为它们共享许多属性和特征。 但是什么更快? 每个表有多少个表,少行或只有一个有很多行的表? 或者没有任何区别? 我将不得不每秒处理大量信息和许多查询。 感谢您的意见!

嵌套属性可以与inheritance结合使用吗?

我有以下课程: 项目 人 人 > 开发人员 人 > 经理 在Project模型中,我添加了以下语句: has_and_belongs_to_many :people accepts_nested_attributes_for :people 当然还有Person类中的相应语句。 如何通过nested_attributes方法将Developer添加到Project ? 以下不起作用: @p.people_attributes = [{:name => “Epic Beard Man”, :type => “Developer”}] @p.people => [#] 如您所见, type属性设置为nil而不是”Developer” 。

当有STI时,Rails会设计注册表

我不知道如何创建一个工人和一个协会。 所以我能够将它们联系在一起。 我在用户中有一个类型colulm。 这是我的表格(http:// localhost:3000 / workers / sign_up): Create Worker resource_name, :url => registration_path(resource_name)) do |f| %> “devise/shared/links” %> 这是我的模特: Class Worker < User devise :database_authenticatable, :registerable end Class Company < User devise :database_authenticatable, :registerable end Class User < Appliaction::Base devise :database_authenticatable, :registerable end 我想创建一个创建User和Worker的注册表单。 我在Workers表中列了姓名,年龄和地址,我想在注册表中填写。 它应该是嵌套的forms,我应该在worker和User表之间创建关联。 最好的问候,Rails初学者

STI和多晶型物

我的代码有问题 class Post < ActiveRecord::Base end class NewsArticle :commentable, :dependent => :destroy, :order => ‘created_at’ end class Comment true, :counter_cache => true end 并尝试去获取一些NewsArticle的评论,我在日志中看到类似的东西 Comment Load (0.9ms) SELECT “comments”.* FROM “comments” WHERE (“comments”.”commentable_id” = 1 and “comments”.”commentable_type” = ‘Post’) ORDER BY created_at 奇怪的是“commentable_type”=“发布” 。 怎么了? PS:Rails 2.3.5 && ruby​​ 1.8.7(2010-01-10 patchlevel 249)[i686-darwin10]

从多个不同的Rails模型创建“提要”

我正在开发一个具有几种不同模型(门票,post,报告等)的应用程序。 每个模型中的数据都不同,我想从所有那些显示全面最近10个条目的模型中创建一个“提要”(所有数据的混合)。 最好的方法是什么? 我是否应该在为用户分配故障单或发布新报告时创建新的Feed模型并写入该表? 我们也一直在寻找STI来构建一个模型引用表,或者只是创建一个聚合数据的类方法。 不确定哪种方法效率最高……