当我使用带有Rails 2.3.4的Ruby 1.9时,flash [:notice]抛出错误

时间:2016-10-22 22:01:14

标签: ruby-on-rails ruby ruby-on-rails-2

我刚刚使用脚手架生成的帖子页面但它们无法正常工作当我尝试访问新帖子页面时,它会给我错误。

这是我的布局代码

    <p style="color: green"><%= flash[:message] %></p>
    <%= yield %>

我尝试访问该页面时收到错误

    Processing PostsController#new (for 127.0.0.1 at 2016-10-23 02:45:19) [GET]
    Rendering template within layouts/posts
    Rendering posts/new

 ActionView::TemplateError (undefined method `^' for "4":String) on   line #12 of app/views/layouts/posts.html.erb:
    9: </head>
   10: <body>
   11: 
   12:p style="color: green"><%= flash[:message] %></p>
   13:   
   14: <%= yield %>
   15: 

app/views/layouts/posts.html.erb:12
app/controllers/posts_controller.rb:29:in `new'
<internal:prelude>:10:in `synchronize'
/home/atta/.rvm/rubies/ruby-1.9.3-p551/lib/ruby/1.9.1/webrick/httpserver.rb:138:in `service'
/home/atta/.rvm/rubies/ruby-1.9.3-p551/lib/ruby/1.9.1/webrick/httpserver.rb:94:in `run'
/home/atta/.rvm/rubies/ruby-1.9.3-p551/lib/ruby/1.9.1/webrick/server.rb:191:in `block in start_thread'

这是我使用ruby 1.9

的宝石列表
    actionmailer (2.3.4)
    actionpack (2.3.4)
    activerecord (2.3.4)
    activeresource (2.3.4)
    activesupport (2.3.4)
    bigdecimal (1.1.0)
    bundler-unload (1.0.2)
    executable-hooks (1.3.2)
    gem-wrappers (1.2.7)
    io-console (0.3)
    json (1.5.5)
    minitest (2.5.1)
    rack (1.0.1)
    rails (2.3.4)
    rake (0.9.2.2)
    rdoc (3.9.5)
    rubygems-bundler (1.4.4)
    rubygems-update (1.8.25)
    rvm (1.11.3.9)
    sqlite3 (1.3.12)
    sqlite3-ruby (1.3.3)

注意:我还将我的RubyGems降级为1.8.25,因为较新的不使用db:create rake命令

2 个答案:

答案 0 :(得分:0)

在ruby 1.8中"abc"[0]返回第一个字符的ASCII码(整数97) 但是在ruby 1.9中它返回带有第一个字符的字符串(字符串“a”)

整数有方法^但字符串没有。

您可以尝试以下方法来解决此问题:

class String
  def ^(value)
    self.ord ^ value
  end
end

这可能不是最好的解决方案(也许最好在rails中修补一些方法)。

答案 1 :(得分:0)

将Rails从2.3.4降级到2.3.18并将rubyGems降级到1.8.25将解决问题。显然Ruby 1.9.3不适合2.3.4