0

我想在我的 routes.rb 中创建一个新路由,它指向一个具有 pdfdownload 方法的“课程”控制器。该路线应该采用 2 个参数:course_id 和 user_id。我认为它应该是这样的:

get "/courses/pdfdownload/:course_id/:user_id"

课程控制器和一切正常,直到我添加上面的行。课程控制器有一个名为 pdfdownload 的方法。然而,当我尝试启动服务器(rails s)时,我收到以下错误:

warning: already initialized constant Mime::PDF
warning: previous definition of PDF was here
Exiting
`default_controller_and_action': missing :controller (ArgumentError)

当我输入 rake:routes 我得到:

missing :controller

课程控制器是现有的,并且与许多方法一起工作得很好。在我将这一行更改为:

get "/courses/pdfdownload"

服务器启动。

rails guides 在“3.2 Dynamic Segments”中说,它必须这样写:

get ':controller/:action/:id/:user_id'

这里有什么问题?非常感谢!

更新:我在视图中使用以下链接:

<%= link_to "PDF", courses_pdfdownload_path(@course.id, user.id) %>
4

4 回答 4

1

尝试match "/courses/pdfdownload/:course_id/:user_id" => "courses#pdfdownload"

于 2013-08-03T17:32:17.753 回答
1

请试一试

get "/courses/pdfdownload/:course_id/:user_id" => "courses#pdfdownload", :as => "courses_pdfdownload"
于 2013-08-03T18:23:33.000 回答
1

正确的路线是:

get '/courses/pdfdownload/:course_id/:user_id', to: 'courses#pdfdownload'

但是对于更好的 REST 路由,我宁愿将其更改为:

get '/courses/pdfdownload/:id/:user_id', to: 'courses#pdfdownload'

动作处理Course资源的事实已经被处理动作的控制器的名称所暗示。所以你不需要调用Courseid :course_id,就:id足够了。

编辑

另请注意,您可以像这样自定义路由助手的名称:

get '/courses/pdfdownload/:id/:user_id', to: 'courses#pdfdownload', as: 'courses_pdfdownload'

您的路线助手将是courses_pdfdownload_path.

于 2013-08-03T18:31:46.100 回答
1

至于错误,

warning: already initialized constant Mime::PDF
warning: previous definition of PDF was here 

这是由于 Rails 自 2011 年以来默认注册 PDF。不再需要在配置中注册它们。

https://github.com/rails/rails/commit/d73269ba53992d8a01e5721aad3d23bc2b11dc4f

于 2016-01-01T20:36:15.060 回答