Ruby on rails Rails中的可选或条件模型关联

Ruby on rails Rails中的可选或条件模型关联,ruby-on-rails,activerecord,associations,belongs-to,has-one,Ruby On Rails,Activerecord,Associations,Belongs To,Has One,我有一个用户模型。 用户可以有3个角色中的1个:角色1、角色2、角色3。这由用户模型中的“角色”列表示。 每个角色都有一个独特的配置文件。角色1\u配置文件,角色2\u配置文件,角色3\u配置文件。每个*_配置文件都是一个模型 如何在Rails中表示此可选关联 我试过两种不同的方法: class User < ActiveRecord::Base #FIRST WAY if current_user.role == 'role1' then has_one :role1_p

我有一个用户模型。 用户可以有3个角色中的1个:角色1、角色2、角色3。这由用户模型中的“角色”列表示。 每个角色都有一个独特的配置文件。角色1\u配置文件,角色2\u配置文件,角色3\u配置文件。每个*_配置文件都是一个模型

如何在Rails中表示此可选关联

我试过两种不同的方法:

class User < ActiveRecord::Base
    #FIRST WAY
    if current_user.role == 'role1' then has_one :role1_profile end 
    #SECOND WAY
    has_one :role1_profile, :conditions => ['user.role = ?', 'role1']
end
class用户['user.role=?','role1']
结束

但这不起作用。正确的方法是什么

关联不是有条件的。保持这种状态可能也是最容易的

用户
和各种角色配置文件之间建立多态关联如何

class User
  belongs_to :role_profile, :polymorphic => true
end

class RoleXProfile
  has_many :users, :as => :role_profile
end
当然,您需要将
role\u profile\u id
role\u profile\u type
字段添加到用户表中


不管你做什么,你都需要检查用户的角色或RoLyPo配置文件,无论你在哪里使用它。 我的理解是,

:条件
是关联模型必须满足的条件(但我可能在这方面错了)


在任何情况下,我认为你使这变得比实际更困难,并通过使这些关系有条件来混淆你真正需要的东西。

+1因为懒惰的程序员是一个好的程序员:)以及关于用于associations@WizardofOgz这就是我一直告诉老板的!我想是。。。哈姆雷特?谁说“从懒惰中产生创新。”你说得绝对正确!我刚刚给了巫师信用,因为他包括代码。:)非常感谢。我认为你的解决方案是完美的。Rails中总有一种方法,但当你不知道该方法时,你往往会以一种奇怪的方式实现解决方案。@jackquack我认为你的方法一点也不奇怪。恰恰相反,这是非常合乎逻辑的。它很可能指出了ActiveRecord可以改进/扩展的地方。不管怎样,我很高兴你把事情办好了。