0

Books モデルを表示しながら、Author モデルから Author Name をリストしようとしています。Books モデルに保存された Author_ID を使用して Authors モデルから列を取得する構文がわかりません。

両方のモデルの私のスキーマ:

CREATE TABLE "authors" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL);

CREATE TABLE "books" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "title" varchar(255), "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL, "author_id" integer);

書籍の index.html.erb:

<h1>Listing books</h1>

<table>
  <tr>
    <th>Title</th>
    <th>Author</th>
    <th></th>
    <th></th>
    <th></th>
  </tr>

<% @books.each do |book| %>
  <tr>
    <td><%= book.title %></td>
    <td><%= book.author_id %></td>
    <td><%= link_to 'Show', book %></td>
    <td><%= link_to 'Edit', edit_book_path(book) %></td>
    <td><%= link_to 'Destroy', book, method: :delete, data: { confirm: 'Are you sure?' } %></td>
  </tr>
<% end %>
</table>

<br />

<%= link_to 'New Book', new_book_path %>

現在の出力

    Listing books

Title                                   Author          
Dirty Dozen                             2      Show    Edit    Destroy
Life and Times of Rich and Famous       1      Show    Edit    Destroy
Digby Manual                            4      Show    Edit    Destroy
Piano for Pros                          5      Show    Edit    Destroy
Pints and Pubs                          6      Show    Edit    Destroy

<td><%= author.(book.author_id).name %></td>著者の ID を使用して著者の名前を取得するという趣旨の何かを使用したいと考えています。

4

1 に答える 1

0

ブックモデルの場合:

class Book < ActiveRecord::Base
  belongs_to :author
  ...

著者モデルの場合:

class Author < ActiveRecord::Base
  has_many :books
  ...

コントローラのインデックスアクションで(n + 1クエリを回避するため)

@books = Book.includes(:author).all # or your criteria

そして最後に

<td><%= book.author.name %></td>
于 2013-01-06T16:11:29.817 に答える