私は公式の Rails ガイドに従おうとしてきましたが、問題が発生しました。以下を使用して新しいプロジェクトでスキャフォールディングされたコードに構文エラー メッセージがあるようです。
rails generate scaffold Post name:string title:string content:text
.
簡単ですよね?rubyonrails.org の公式「ブログを作成する」チュートリアルの最初のページを見ていきます。しかし、私が行くとhttp://localhost:3000/posts
、この問題が発生します。
SyntaxError メッセージ:
/projects/blog/app/controllers/posts_controller.rb:9: syntax error, unexpected ':', expecting '}'
format.json { render json: @posts }
^
ステップ 6.3では、単純な「投稿の一覧」ページが表示されているはずですが、おそらくブログ エントリはありません。
私の posts_controller.rb ファイル:
class PostsController < ApplicationController
# GET /posts
# GET /posts.json
def index
@posts = Post.all
respond_to do |format|
format.html # index.html.erb
format.json { render json: @posts }
end
end
...(continued. This was all generated via a scaffold.)
私のセットアップ:
ガイドには次のように書かれています。
このガイドは Rails 3.2 に基づいています。ここに示すコードの一部は、以前のバージョンの Rails では機能しません。
私rails -v
は言います:
Rails 3.2.8
rubyonrails.orgは次のように述べています。
Rails で使用する場合は、Ruby 1.9.3 をお勧めします。Rails 3.2 は、Ruby 1.8 をサポートする最後のものです。Ruby 1.8.6 以前はサポートされておらず、バージョン 1.9.1 もサポートされていません。
私ruby -v
は言います:
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-darwin12.2.0]
異なるバージョンの Ruby を (rbenv を使用して) 試した後でも、常に SyntaxError メッセージが表示されます。私が試したバージョンは次のとおりです。
1.9.2-p290
1.9.2-p320
1.9.3-p194 (latest)
回避策:
に変更format.json { render json: @post }
するとformat.json { render :json => @post }
、問題が修正されます。
私の質問:
Ruby の最新バージョンと Rails の最新バージョンでは、互換性があるはずのバージョンに SyntaxError が発生するのはなぜですか? 公式チュートリアルの最初のページのこの時点では、まだ ruby を書いていません。posts_controller.rb
ファイル内のこれらの行は、Rails の最新の安定バージョンによって生成されたもので、構文が古くなっていますか? Rails は、バージョン 1.9.2 に戻って Ruby 構文を使用するように更新されていませんか?