我的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| %>
所以这似乎与我的路线有些冲突,因为它不喜欢我的工作路径 - 任何人都知道这是从哪里来的?
提前感谢您的帮助。
答案 0 :(得分:1)
form_for @job
将寻找一个工作控制器。因为你已经嵌套它,它将无法工作。
将其切换为
<%= form_for([@customer, @job]) do |f| %>
假设您有一个前置过滤器,可以在控制器中找到客户。
答案 1 :(得分:1)
只需替换
<%= form_for(@job) do |f| %>
到
<%= form_for[@customer, @job]) do |f| %>