1

Ruby on Railsを勉強しています。

外部キーについていくつか問題があります。

私は 2 つのモデルの本と著者を持っています。

これらのモデルは以下です。

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 = Book.first
> book.author.name

しかし、このように列名だけにアクセスしたいのです。

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

うまくいきません。

Book テーブルには「名前」で名前が付けられた列がないためです。

これどうやってするの?

外部キーの値にアクセスするだけだと思います。

これを行う簡単な方法が可能です。

私を助けてください!

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 に答える