【发布时间】:2015-01-02 13:36:09
【问题描述】:
如何执行带条件的左外查询。正如我所读到的,ActiveRecord 不允许制作我想要的东西。我试试这个:
Platform.where(url: urls).includes(:campaign_platforms).where.not('campaign_platforms.campaign_id = ?', campaign.id)
并得到“Mysql2::Error: Unknown column 'campaign_id' in 'where clause'...”
UPD:
class Platform < ActiveRecord::Base
has_many :campaign_platforms
has_many :campaigns, through: :campaign_platforms
has_many :posts
has_many :screenshoots
belongs_to :platform_category
belongs_to :user
end
class CampaignPlatforms < ActiveRecord::Base
belongs_to :campaign, dependent: :destroy
belongs_to :platform, dependent: :destroy
end
class Campaign < ActiveRecord::Base
has_many :campaign_platforms
has_many :platforms, through: :campaign_platforms
end
【问题讨论】:
-
确保
campaign_id列存在于您的campaign_platforms表中 -
你能给我们看看你的模型吗?
-
它确实存在,正如我所提到的,这是 AR 不允许进行这样的查询。
-
试试:
Platform.joins(:campaign_platforms).where(url: urls).not(campaign_platforms: {campaign: campaign.id}) -
@User089247, Nope, NoMethodError: undefined method `not' for #<:activerecord_relation:0x007fba00fc69c8> 正如我从这里了解的 stackoverflow.com/questions/24358805/left-join-in-rails-4 它必须是连接中的 SQL 查询
标签: mysql ruby-on-rails activerecord