我正在尝试创建一个不寻常的关联,在该模型上,我将使用foreign_key / primary_key作为模型的类名的模型上具有has_one关联。
例如:
class ProcessAction
has_one :process_action_type, :foreign_key => 'class_name', :primary_key => :class_name
def class_name
@class_name = class.name #i.e. "ProcessAction::SubclassOne"
end
end
class ProcessActionType
end
ProcessAction模型是使用STI的一系列子类的父模型。 ProcessActionType模型是一个类,该类列出了ProcessAction的所有子类,以及应用程序中使用的其他相关信息,例如处理顺序,例如:
Process Action Types
ID class_name priority visible_to
1 ProcessAction::SubclassOne 1 customer
2 ProcessAction::SubclassTwo 2 admin
3 ProcessAction::SubclassThree 3 both
我知道我可以指定正确的:foreign_key并指定一个:primary_key,但是可以使用class_name(即“ ProcessAction :: SubclassOne”)作为主键吗?
我可能不得不退后一步,只是在每个process_action记录上放置一个process_action_type_id,但是如果可能的话,我想避免这种情况,因为它隐含在process_action的类类型中。
使用Rails 4.1
谢谢!
答案 0 :(得分:0)
我不认为您可以使用has_one
或belongs_to
,因为这些方法会固有地比较目标记录的ID。
最好在需要时提供一种提取类型记录的方法。
def process_action_type
ProcessActionType.find_by(class_name: self.class)
end