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

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

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

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

Active Record

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

Q&A

解決済

1回答

4677閲覧

[Ruby ActiveRecord]scopeの構文エラー

ruby_nyumon

総合スコア93

Ruby

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

Active Record

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

1グッド

0クリップ

投稿2015/09/21 02:02

scopeを試しているのですが、エラーになるので、原因を教えて下さい。

・発生しているエラー
ドットインストールでActiceRecordを勉強しています。

http://dotinstall.com/lessons/basic_activerecord/23507

この中で、以下の内容があります。

class Post < ActiveRecord::Base scope :top3, order("created_at").limit(3) end p Post.top3

実行すると、エラーになります。

/home/vagrant/.rbenv/versions/2.1.1/lib/ruby/gems/2.1.0/gems/activerecord-4.2.4/lib/active_record/scoping/named.rb:143:in `scope': The scope body needs to be callable. (ArgumentError) from main.rb:9:in `<class:Post>' from main.rb:8:in `<main>'

・調べたこと
エラー内容でググると、以下ありました。

http://stackoverflow.com/questions/28951671/argument-error-the-scope-body-needs-to-be-callable

構文がどうやら違うようでした。
ので、以下に変更しました。

class Post < ActiveRecord::Base scope :top3, -> {order("created_at").limit(3)} end p Post.top3

すると、実行できました。

・質問内容
ドットインストール内では、最初の書き方で実行できているのですが、自分の開発環境では、変更後の構文でしか実行できません。scopeの書き方をググると、後半の書き方の例が出てくるのですが、前半の書き方でも実行できるようにするには、どうすればよいでしょうか?

432432👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

上のドットインストールを確認しましたが、最初の動画にもあるように、これはActiveRecord 3.2時代の書き方です。

最新版は4系列ですので、古い書き方では動作しません。

投稿2015/09/21 02:13

maisumakun

総合スコア145183

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

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

ruby_nyumon

2015/09/21 02:17

おー、バージョンによって、構文が違ったのですね。大変助かりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問