如何通过rails中的arel_table访问外键

时间:2013-10-10 15:58:36

标签: ruby-on-rails ruby

我正在研究Ruby on Rails。

我对外键有一些问题。

我有两本模特书和作者。

这些模型如下。

class Author < ActiveRecord::Base
  attr_accessible :name, :age, :address

  has_many :books
end

class Book < ActiveRecord::Base
  attr_accessible :author_id, :title, :cost

  belongs_to :author
end

我想从书表中访问作者姓名。

在控制台上,我可以像这样访问。

> book = Book.first
> book.author.name

但我想只访问这样的列名。

 Book.where(rel_table[:name].eq("Sam"))

它不起作用。

因为Book表没有由“name”命名的列。

我该怎么做?

我认为只需访问外键值。

这可能是简单的方法。

请帮助我!

2 个答案:

答案 0 :(得分:0)

Book.include(:author).where("authors.name = ?", 'sam')

答案 1 :(得分:0)

与@Winfield几乎相同的答案,但只有Rails语法(这意味着此查询适用于所有类型的数据库,具体取决于所选的适配器):

sam_books = Book.includes(:author).where(author: { name: "Sam" })

此查询将返回所有其作者名为“Sam”的图书。

它甚至不是一个arel_table!


我刚刚看到你正在学习Rails。为了记录,您可以以相反的方式完成相同的操作:

Author.where(name: 'Sam').first.books 
# => Returns books of the author named "Sam"