3.1命名路由查詢參數的問題,從升級的Rails應用程序3.0.17到3.1.8我遇到一個奇怪的錯誤與使用命名路線和增加查詢參數後。滑軌從發言
向後開始,這裏的相關錯誤和堆棧跟蹤:
NameError (undefined local variable or method `env' for #<AnswerPagesPresenter:0x0000000420df60>):
actionpack (3.1.8) lib/action_controller/metal/url_for.rb:36:in `url_options'
actionpack (3.1.8) lib/action_dispatch/routing/url_for.rb:148:in `url_for'
actionpack (3.1.8) lib/action_dispatch/routing/route_set.rb:207:in `edit_answer_sheet_page_path'
vendor/plugins/questionnaire_engine/app/presenters/answer_pages_presenter.rb:81:in `new_page_link'
vendor/plugins/questionnaire_engine/app/presenters/answer_pages_presenter.rb:91:in `block (2 levels) in page_list'
vendor/plugins/questionnaire_engine/app/presenters/answer_pages_presenter.rb:90:in `each'
vendor/plugins/questionnaire_engine/app/presenters/answer_pages_presenter.rb:90:in `block in page_list'
vendor/plugins/questionnaire_engine/app/presenters/answer_pages_presenter.rb:89:in `each'
vendor/plugins/questionnaire_engine/app/presenters/answer_pages_presenter.rb:89:in `page_list'
vendor/plugins/questionnaire_engine/app/presenters/answer_pages_presenter.rb:21:in `initialize'
app/controllers/applications_controller.rb:166:in `new'
app/controllers/applications_controller.rb:166:in `setup_view'
app/controllers/applications_controller.rb:19:in `show_default'
...
下面是AnswerPagesPresenter的一段代碼在調用已命名的路線(我一直在使用多張事情的「a」變量,嘗試這是額外的查詢參數,但它是無正常):
def new_page_link(answer_sheet, page, a = nil)
PageLink.new(page.label, edit_answer_sheet_page_path(answer_sheet, page, :a => a), dom_page(answer_sheet, page), page) if page
end
此外,在我的演示類的頂部我有下面幾行代碼:
include ActionView::Helpers::TagHelper # link_to
include ActionView::Helpers::UrlHelper # url_for
include ActionController::UrlFor # named routes
include ActionController::RecordIdentifier # dom_id
include Rails.application.routes.url_helpers
而且從運行「耙路線」命令相關的行只是爲了顯示它是一個有效的途徑:
edit_answer_sheet_page GET /answer_sheets/:answer_sheet_id/page/:id/edit(.:format) {:action=>"edit", :controller=>"answer_pages"}
從插件的routes.rb文件:
resources :answer_sheets do
member do
post :send_reference_invite
post :submit
end
resources :page, :controller => :answer_pages do
member do
post :save_file
end
end
end
任何人都知道什麼是去這裏?我一直試圖弄清楚爲什麼它要LIB/action_controller /金屬/ url_for.rb,而不是僅僅使用url_options方法的lib/action_dispatch /路由/ url_for.rb,但我很無知,當涉及到Rails的源代碼。這在Rails 3.0.17中工作得很好。我會很感激任何見解!
你怎麼暴露url_helper方法給你的主持人? – gregates
@gregates我在問題中添加了相關的行,儘管我確實找出了一個解決方案,正如你所看到的。 :) – Justin
很酷。是的,我在那裏去的是,通常,我看到的模式與存儲在一個實例變量(通常@h)輔助對象初始化演示,然後URL助手由'h.url_helper'調用,由於助手可以訪問請求,env等等。所以這可能是一個替代解決方案。 – gregates