0

我正在尝试将我的 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_userapplication_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/Openrails 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 主页。

4

1 回答 1

0

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

root 'home#index'
于 2013-09-12T22:11:43.613 回答