Rails where 子句用于 :through 关联

Mar*_*ear 3 ruby-on-rails ruby-on-rails-3

我有以下关联...

class Event < ActiveRecord::Base
  ...
  has_many :tags, :through => :taggings
Run Code Online (Sandbox Code Playgroud)

这使我可以执行诸如 Event.last.tags 之类的操作并查看与电子邮件关联的所有标签。我正在尝试为标签提出一个 where 子句,我可以在其中执行诸如...

Event.where tag: 'my_tag'
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我得到:

2.1.3 :020 > Event.where tags: 'test'
  Event Load (0.4ms)  SELECT `events`.* FROM `events` WHERE `events`.`tags` = 'test'
ActiveRecord::StatementInvalid: Mysql2::Error: Unknown column 'events.tags' in 'where clause': SELECT `events`.* FROM `events`  WHERE `events`.`tags` = 'test'
Run Code Online (Sandbox Code Playgroud)

Sur*_*rya 6

这是您要找的吗?:

Event.includes(:tags).where(tags: {name: 'my_tag'})
Run Code Online (Sandbox Code Playgroud)

这将获得所有带有标签名称的事件'my_tag'name使用tags您尝试为其运行查询的表中存在的适当列名进行更改。