1

我们的 Rails 应用程序中有customersprojects模型。然而project,模型可能会或可能不会与customer模型一起出现。他们的关系是:

class Project
  belongs_to :customer, :class_name => 'Customer'
end

class Customer
  has_many :projects, :class_name => 'Project', :conditions => if projects model exists
end

基本上,我们希望根据项目模型是否存在使客户模型中的 has_many 动态化。这在 rails 3.2.12 中可行吗?谢谢您的帮助。

4

1 回答 1

3

我不确定我是否跟随。如果您需要根据关联类是否已定义来进行动态关联,那么您可以按照以下方式编写一些内容:

class Customer
   if defined? Project
      has_many :projects, :class_name => 'Project'
   end
end

如果您的意思是像数据库中的对象或记录这样的模型,那么我不确定为什么关联不能停留在原处。

更新

是的,您可以在一行中做到这一点。但请注意,这在开发环境中不会按预期工作,因为 config.cache_classes 设置为 false,即“已定义?Project' 将始终返回 nil ,除非您明确调用它。

如果您需要测试此行为,请在您的 development.rb 中设置 config.cache_classes = true (请注意,除非您重新启动服务器,否则这将忽略代码更改)。

class Customer
   has_many :projects, :class_name => 'Project' if defined? Project
end
于 2013-04-17T19:07:19.010 回答