2

私は公式の 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 構文を使用するように更新されていませんか?

4

2 に答える 2

2

Gemfileruby "1.9.3"で、ソースのすぐ下に ruby​​ のバージョンを指定します。それが修正されるかどうかを確認してください。

編集herokuへのデプロイで問題が発生し、それをGemfileに追加するとエラーが修正されました。heroku で指定された ruby​​ のバージョンが 1.9.3 だったのに、どうやら 1.9.3 ではなく 1.8.7 を使おうとしていたようです。

于 2012-11-13T19:20:18.553 に答える
1

この「RUBY_VERSION を置く」を posts_controller の一番上に置いてもよろしいですか?正しいバージョンがピックアップされているかどうか、私は興味があります。Rails サーバーを起動すると、バージョン番号がコンソールに出力されます。

Rails は間違いなく 1.9.3 に対応しています。1.9.3 は私が認識しているものを壊すものではなく、Rails は 1.8 と互換性があるため、問題なく動作するはずです。

于 2012-11-13T19:13:53.953 に答える