我正在尝试将我的 rails 2.3.14 应用程序升级到 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"
所以在 rails 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
.
因此,如果我进入http://localhost:3000/ticket/list/Open
rails 4 应用程序,我会收到此错误: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')
所以主页 url 仍然把我带到默认的 rails 主页。