質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Active Record

Active Recordは、一つのオブジェクトに対しドメインのロジックとストレージの抽象性を結合するデザインパターンです。

Q&A

解決済

2回答

1519閲覧

Ruby on railsについて教えてください

hirotto57

総合スコア57

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Active Record

Active Recordは、一つのオブジェクトに対しドメインのロジックとストレージの抽象性を結合するデザインパターンです。

0グッド

0クリップ

投稿2016/01/01 07:21

下記の式を実行した際に、ActiveRecord::Relation []、とブラウザに表示されたのですが、これは何のデータ型なのでしょうか?
またデータ型と異なる場合はどのようなものなのでしょうか?

私の中ではwhereメソッドでデータを取得できなかった場合は、nilが返ってくると思っていました。 ただ今のままでは、データの有り無しに関わらず、<%= link_to '書籍を登録してください', new_book_path %>が表示されてしまいます。
やりたいことは、データの有り無しを利用し(返ってきたデータ型を利用し)、ビューで条件分岐を行いたいです。
宜しくお願い致します。

books_controller.rb
def index
@book = Book.where(user_id: current_user.id)
raise @book.inspect
end

*current_userはDEVISEのヘルパーメソッドです。

ブラウザの表示
ActiveRecord::Relation []

例)
<% if @book == nil %>
<%= link_to '書籍を登録してください', new_book_path %>
<% elsif @book != nil %>
<%= link_to '書籍の感想をお書きください', new_book_path %>
<% else %>
<%= link_to '会員登録をしてください', new_user_path %>
<% end %>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

... これは何のデータ型なのでしょうか?

ActiveRecord::Relation という型です。

参考情報:

...
Active Recordでは、データベースからオブジェクトを取り出すための検索メソッドを多数用意しています。
bind
... 省略 ...
where
上のメソッドは、すべてActiveRecord::Relationのインスタンスを返します。
...

↑は ActiveRecord::Relation の API リファレンスです。

↑は ActiveRecord で where(...) した時の結果の数などを調べる方法の
size, length, count, empty?, any?, presence?, blank? についての比較が述べられています。

↑は日本語のページです。

投稿2016/01/01 12:25

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hirotto57

2016/01/03 23:00

分かりやすく教えて頂きありがとうございます。m(_ _)m 勉強させて頂きます。 また不明な点があった際には宜しくお願い致します。
guest

0

データがある場合にしてもない場合にしても、whereメソッドの返り値はActiveRecord::Relationという型のオブジェクトになっています。このオブジェクトは、

  • さらにwhereやモデルのスコープをつなげると、その条件も記憶したActiveRecord::Relationを返す
  • 配列としてアクセスしようとすると、そこでデータベースからデータを取得して、モデルの配列として働く

という機能を持っています。空かどうかチェックしたい場合は、.empty?で可能です。

投稿2016/01/01 10:27

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hirotto57

2016/01/03 23:01

分かりやすく教えて頂きありがとうございます。m(_ _)m 勉強させて頂きます。 また不明な点があった際には宜しくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問