has_many :condition multiple models 如何在这里使用join?

has_many :condition multiple models how to use join here?

我有以下模型结构:

模范访客

class Visitor < ActiveRecord::Base
 has_many: triggers 
end

模型触发器

class Trigger < ActiveRecord::Base
  belongs_to :visitor, :inverse_of => :triggers
  belongs_to :event, :inverse_of => :triggers
end

模特活动

class Event < ActiveRecord::Base
 has_many: triggers 
end

我正在尝试在访客模型中设置自定义关联,如下所示:

has_many: triggers_that_pass_some_condition ,:class_name => "Trigger", 
 :conditions => ["triggers.some_column >= events.some_column"]

问题是它不起作用..我猜我必须做某种连接来比较两个独立模型(相互关联)的列

我试过了 triggers.some_column >= triggers.event.some_column

那也不行。有人有什么建议吗?谢谢!

确保您首先在模型设置中添加 VisitorTrigger 之间的正确关联。从那里,您可以按如下方式添加自定义关联:

class Visitor < ActiveRecord::Base
  has_many :approved_triggers, -> { includes(:events).where("events.something = ?", true).references(:events) }, class_name: 'Trigger', inverse_of: :visitor
end

class Trigger < ActiveRecord::Base
  belongs_to :visitor, inverse_of :triggers
end

现在您的 Trigger class 与 Visitor.

没有关联

试试下面的代码..

class Trigger < ActiveRecord::Base
  belongs_to :event 
  belongs_to :visitor
end

# Visitors.rb
has_many :triggers_with_condition, -> { includes(:event).where(some_trigger_column >= event.some_event_column)}, class_name: "Trigger"

感谢 Darpa 的线索,我最终确定了这个:

 has_many :custom_trigger, {:class_name => "Trigger", :include => :event,
 :conditions => ["triggers.some_column >= events.another_column"]}