代码之家  ›  专栏  ›  技术社区  ›  Quentin

Rails ActiveRecord:在加入后更改用于集合的ruby类

  •  0
  • Quentin  · 技术社区  · 6 年前

    假设我有这些模型,它们之间有关联:

    class Book
      belongs_to :publisher
      belongs_to :author
    end
    
    class Publisher
      has_many :books
    end
    
    class Author
      has_many :books
    end
    

    我写了这样一个查询:

    def get_old_authors_at_publisher(publisher, date)
      publisher
        .books
        .joins(:author)
        .where('"book"."publication_date" < ?', date)
    end
    

    问题是这个查询返回书籍,但我需要作者。由于所有列都是可访问的(类似于 SELECT "authors".* 应该有用),但我不知道怎么做。

    1 回复  |  直到 6 年前
        1
  •  4
  •   infused    6 年前

    将has\u many通过关联添加到发布者模型:

    class Publisher
      has_many :books
      has_many :authors, through: :books
    end
    

    然后,您可以从Publisher的实例中使用它:

    publisher.authors.where('books.publication_date < ?', 5.years.ago)