我正在尝试将我的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主页。
答案 0 :(得分:0)
设法解决它,最后非常简单,只需要以下路线:
root 'home#index'