Rails where子句:通过关联

时间:2014-11-13 19:43:11

标签: ruby-on-rails ruby-on-rails-3

我有以下协会......

class Event < ActiveRecord::Base
  ...
  has_many :tags, :through => :taggings

这允许我执行类似Event.last.tags的操作并查看与电子邮件关联的所有标记。我试图想出一个标签的where子句,我可以做类似的事情......

Event.where tag: 'my_tag'

当我这样做时,我得到:

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'

2 个答案:

答案 0 :(得分:4)

这就是你要找的东西吗?:

Event.includes(:tags).where(tags: {name: 'my_tag'})

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

答案 1 :(得分:0)

您需要指定包含“my_tag”的标记记录的字段。例如,如果该字段名为name,则:

Event.first.tags.where(name: 'my_tag')