我正在研究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”命名的列。
我该怎么做?
我认为只需访问外键值。
这可能是简单的方法。
请帮助我!
答案 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"