2

我一直在尝试遵循官方的 Rails 指南并遇到了问题。在新项目中使用以下代码构建的代码似乎存在语法错误消息:

rails generate scaffold Post name:string title:string content:text.

很简单,对吧?我正在浏览官方 ruby​​onrails.org “制作博客”教程的第一页。但是当我去http://localhost:3000/posts我得到这个问题。

语法错误消息:

/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说:

我们推荐 Ruby 1.9.3 与 Rails 一起使用。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]

我总是收到 SyntaxError 消息,即使在尝试了不同版本的 Ruby(使用 rbenv)之后也是如此。以下是我尝试过的版本:

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 还没有更新到使用 Ruby 语法回到 1.9.2 版?

4

2 回答 2

2

在您的 Gemfile 中ruby "1.9.3",在源代码下方指定 ruby​​ 版本。看看能不能解决。

编辑我在部署到 heroku 并将其添加到我的 Gemfile 时遇到了问题,修复了错误。显然它试图使用 1.8.7 而不是 1.9.3,即使 heroku 指定的 ruby​​ 版本是 1.9.3

于 2012-11-13T19:20:18.553 回答
1

介意把这个“puts RUBY_VERSION”放在你的posts_controller的顶部吗?我很好奇是否会选择正确的版本。当您启动 Rails 服务器时,它应该将版本号输出到控制台。

Rails 绝对是 1.9.3 友好的。1.9.3 并没有破坏我所知道的任何东西,并且由于 Rails 与 1.8 兼容,它应该可以正常工作。

于 2012-11-13T19:13:53.953 回答