我一直在尝试关注official rails guide并遇到问题。在使用以下项目的新项目中搭建代码的代码上似乎存在语法错误消息:
rails generate scaffold Post name:string title:string content:text
。
够简单吧?我刚刚浏览官方rubyonrails.org“制作博客”教程的第一页。但是当我去http://localhost:3000/posts
时,我得到了这个问题。
/projects/blog/app/controllers/posts_controller.rb:9: syntax error, unexpected ':', expecting '}'
format.json { render json: @posts }
^
在step 6.3我应该会看到一个简单的“列表帖子”页面,可能没有博客条目。
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.)
guide说:
本指南基于Rails 3.2。这里显示的一些代码在早期版本的Rails中不起作用。
我的rails -v
说:
Rails 3.2.8
我们建议使用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]
即使在尝试不同版本的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吗?在官方教程的第一页的这一点上,我甚至没有写过任何红宝石。我的posts_controller.rb
文件中的这些行是由最新稳定版本的Rails 生成并且语法已过时? Rails还没有更新为使用Ruby语法返回1.9.2版本?
答案 0 :(得分:2)
在你的Gemfile中,在源代码下指定像ruby "1.9.3"
这样的ruby版本。看看是否能解决问题。
编辑我将此问题部署到heroku并将其添加到我的Gemfile中修复了错误。显然它试图使用1.8.7而不是1.9.3,即使heroku指定的ruby版本是1.9.3
答案 1 :(得分:1)
介意把这个“把RUBY_VERSION”放在你的posts_controller的顶部吗?如果正确的版本被拿起,我很好奇。当您启动Rails服务器时,它应该将版本号输出到控制台。
Rails肯定是1.9.3友好。 1.9.3并没有破坏我所知道的任何东西,而且由于Rails是1.8兼容的,它应该可以正常工作。