1

我正在研究 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”命名的列。

我怎样才能做到这一点?

我认为只是访问外键值。

这可能是一种简单的方法来做到这一点。

请帮我!

4

2 回答 2

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"
于 2013-10-10T17:38:04.730 回答
0
Book.include(:author).where("authors.name = ?", 'sam')
于 2013-10-10T16:04:04.190 回答