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
那也不行。有人有什么建议吗?谢谢!
确保您首先在模型设置中添加 Visitor
和 Trigger
之间的正确关联。从那里,您可以按如下方式添加自定义关联:
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"]}
我有以下模型结构:
模范访客
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
那也不行。有人有什么建议吗?谢谢!
确保您首先在模型设置中添加 Visitor
和 Trigger
之间的正确关联。从那里,您可以按如下方式添加自定义关联:
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"]}