新手问题 用 form_for 创建嵌套资源

tardis · 2015年03月20日 · 最后由 bluesky0318 回复于 2015年03月30日 · 2371 次阅读

company.rb

class Company < ActiveRecord::Base
    has_many :jobs, dependent: :destroy
end

job.rb

class Job < ActiveRecord::Base
    belongs_to :company
end

routes.rb

resources :companies do
    resources :jobs
end

我想提交一个 form_for 表单创建一个新的 job,所以我写了这样的代码

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

这个报错, 所以我又这样写

<%= form_for(:job, url: company_jobs_path do |f| %>
  ...
<% end %> 

这个也报错, 他们的错误是

Routing Error No route matches [POST] "/jobs" 和 No route matches {:action=>"index", :controller=>"company_jobs", :id=>"1"} missing required keys: [:company_id] 我怎么能向 /company_jobs_path (类似这种 url /companys/:company_id/jobs(.:format)) 提交创建 job 的表单

Thank you for your answer!

route

resources :companies  do
  resources :jobs
end

form

<%= form_for([@company, @company.jobs.build]) do |f| %>

#1 楼 @libuchao 谢谢, 这个问题解决了, 但是又出现了一个新的问题。。。求解

我在 job controller 中定义了

def create
   @company = Company.find(params[:company_id])
   @job = @company.jobs.build(job_params)
   if @job.save
     flash[:success] = "job has created!"
     redirect_to @job  #这行报错
   else
     redirect_to @company
   end
 end

错误为:

NoMethodError in JobsController#create
undefined method `job_url' for #<JobsController:0x00000105baf968>

这个怎么解决?

#2 楼 @tardis

你路由里面已经把 job 嵌套在 company 里了

redirect_to company_job_url(@company , @job)   # example.com/companies/:company_id/jobs/:job_id

#3 楼 @libuchao 解决了 谢谢 ^_^

需要对着 routes 写参数的

需要 登录 后方可回复, 如果你还没有账号请 注册新账号