Rails应用程序从2.3.14升级到4个错误

时间:2013-09-12 20:02:59

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

我正在尝试将我的rails 2.3.14 app升级到rails 4但遇到一些问题。

在我的routes.rb中,我在更具体的规则之后定义了以下一般规则:

map.connect ':controller/:action/:id'
map.connect ':controller/:action/:id/:org'
map.connect ':controller/:action/:id.:format'  

map.connect ':action/:id', :controller => "home"

所以在轨道4等效我改变了这些

get  ':controller/:action/:id'
get  ':controller/:action/:id/:org'
get  ':controller/:action/:id.:format'  

get  ':action/:id', :controller => "home"

http://localhost:3000/仍然将我带到默认主页,我认为这是因为没有root 'welcome#index'(来自routes.rb文件的示例)路由,但我不知道如何实现因为在我的应用程序中,主页URL在application_controller.rb

中定义如此
def default_home_url
  if @person
    '/ticket/list/Open'
  elsif request.env["HTTP_REFERER"].include? 'portal'
  '/portal'
  else
    "/"
  end
end

home_controller.rb #index

def index
  redirect_to default_home_url if @person
end

以及设置@person的方式位于check_user

中名为application_controller.rb的函数中
def check_user
 @person = Person.find(session[:person]) if session[:person]
 @admin = (@person and @person.priviledges == 'admin')
end

当有人登录application_controller.rb时,会调用此函数。

所以,如果我在rails 4 app中转到http://localhost:3000/ticket/list/Open,我会收到此错误:NoMethodError in TicketController#list undefined method 'include?' for nil:NilClass,突出显示的是这一行:

elsif request.env["HTTP_REFERER"].include? 'portal'

来自application_controller.rb,而非ticket_controller.rb所以我对发生的事情感到十分困惑。

道歉,如果有什么不清楚,我可以在需要时提供更多信息。

更新

通过将该行更改为

来管理以消除错误
elsif request.env.try(:include?, 'portal')

所以主网址仍然将​​我带到默认的rails主页。

1 个答案:

答案 0 :(得分:0)

设法解决它,最后非常简单,只需要以下路线:

root 'home#index'