0

我有一个模型“工作”,我正在向其中添加一个新动作“预览”。为了支持这个新动作,我修改了 routes.rb 如下:

resources :jobs do
   member do
      get 'preview'
   end
end

然后在我的工作创建操作中,我得到了以下内容:

 if @job.save
    redirect_to preview_job_url

但是,当我保存表单而不是重定向到预览 url 时,我收到以下路由错误:

Routing Error
No route matches {:action=>"preview", :controller=>"jobs"}

无法弄清楚为什么会发生这种情况,因为 URL 正常工作(http://localhost:3000/jobs/id/preview),如果我运行 rake 路由,正确的路由似乎就在那里:

preview_jobs GET    /jobs/preview(.:format)            {:action=>"preview", :controller=>"jobs"}

关于可能发生什么的任何想法?似乎所有部件都已到位,但我是 Rails 的新手,所以我确定我错过了一些明显的东西。非常感谢。

4

1 回答 1

3

您将“预览”定义为成员操作。成员操作是指模型的一个实例。当您调用 preview_job_url 时,您需要传递特定的 Job 对象或 Job 的 ID,以便可以创建 URL。这应该是有道理的......如果你不告诉框架你想为哪个 Job 构建 URL,Rails 怎么能构建一个引用特定模型的 URL?

在你的控制器中试试这个:

if @job.save
  redirect_to preview_job_url(@job)
于 2011-03-07T00:02:09.087 回答