路由错误在Rails中的link_to上传递ID

时间:2014-08-05 15:32:36

标签: ruby-on-rails routes controllers

我的rails应用程序中有以下一组路由:

resources :customers do
  resources :jobs
end

我还有以下两个模型 - job.rb和customer.rb:

class Job < ActiveRecord::Base
  belongs_to :customer
end

class Customer < ActiveRecord::Base
  has_many :jobs
end

我在jobs_controller.rb中有以下新方法:

def new
  @customer = Customer.find(params[:customer_id])
  @job = @customer.jobs.build
end

我正在尝试在创建时将客户ID直接传递给新作业,因为每个作业都应该与客户相关联(没有与customer_id相关联的流氓作业)。

为了做到这一点,我在客户视图页面上有以下链接:

<%= link_to "Add New Job", new_customer_job_path(@customer) %>

单击时,ID正在传递,但我收到no方法错误,如下所示:

NoMethodError in Jobs#new

undefined method `jobs_path' for #<#<Class:0x007f89899d9030>:0x007f898a7ab0f0>

  <%= form_for(@job) do |f| %>

所以这似乎与我的路线有些冲突,因为它不喜欢我的工作路径 - 任何人都知道这是从哪里来的?

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

form_for @job将寻找一个工作控制器。因为你已经嵌套它,它将无法工作。

将其切换为

<%= form_for([@customer, @job]) do |f| %>

假设您有一个前置过滤器,可以在控制器中找到客户。

答案 1 :(得分:1)

只需替换

<%= form_for(@job) do |f| %>

<%= form_for[@customer, @job]) do |f| %>