QA@IT

RailsでDBの要素が正しく全て表示されない

3209 PV

コンソールでは、以下のように値が表示されますが

irb(main):001:0> Book.find(1)
  Book Load (2.2ms)  SELECT "books".* FROM "books" WHERE "books"."id" = ? LIMIT 1  [["id", 1]]
=> #< Book id: 1, isbn: "0", title: "a", price: 0, publish: "a", published: "1989-10-12", cd: false, created_at: "2012-09-20 16:00:27", updated_at: "2012-09-20 16:00:27" >

以下のようにして、コントローラで画面に出力するとだけが表示されます。

class TopController < ApplicationController
  def index
    books = Book.find(1)
    render :text => books
  end
end

おそらく<>で囲まれた値を全く認識していないのが原因だと思いますが、改善策が見つかりません。
根拠はコンソールでの表示も<>で挟まれた所をなくすとだけだからです。

どのたか少しで教えていただけないでしょう?
ほんとによろしくお願いします。困っています。

  • どちらかというとRailsより表示する側の問題のようにも聞こえますが、何で表示しようとしていますか? -
  • Chromeで表示しています。

    因みに以下のようにデータベースから引っ張らずに表示させる分には正常に表示されます。
    class TopController < ApplicationController
    def index
    books = "あいうえお"
    render :text => books
    end
    end
    -
  • すみません、携帯から投稿するとインデントがうまくつきませんでした。 -
  • 質問を少し編集して「パッチ」を送りました。ご自分のユーザーアイコンのところから確認して取り入れてください。コード部分は正しくインデントしてハイライトされると思います -
  • #が表示されているブラウザの画面から右クリックしてHTMLソース(HTMLじゃないですが)を見てみたら、#以降の全体が含まれていたりしませんか? curl があるなら、curl http://localhost:3000/books/ とかして確認できるかもしれません -

回答

単純にBook.find(1)で取得したBookオブジェクトをそのままrender :textで、テキストとして表示しようとしているからだと思います。

試しにrender :text => booksのところをrender :text => books.titleのように変更すると画面に"a"が表示されないでしょうか?

また、Book.find(1)で取得した場合は、複数のBookオブジェクトが配列で格納される訳では無く、idが1のBookオブジェクトが一つ取得される筈なので、booksでは無く、bookの変数に格納すべきかと思います。
紛らわしいので。

全ての要素を表示させたいのであれば、基本的に@book = Book.find(1)のようにインスタンス変数に格納して、View側で<%= @book.id %>などのように一つ一つ、要素を表示させる処理にするかと思います。

編集 履歴 (0)
  • ありがとうございます。
    助かりました。
    また見かけたらご指南よろしくお願いします。
    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。