我想用一種形式創建Job,Employer和Company。如何使用一種形式創建3個對象,只有它們有效?
如何創建Job
僅當Job
,Company
和Employer
有效?
型號
class Job < ActiveRecord::Base
accepts_nested_attributes_for :company, :employer
belongs_to :company
belongs_to :employer
validates :employer_id, presence: true, on: :update
validates :company_id, presence: true
def self.initialize_with_company(job_params)
company_attributes = job_params.delete(:company_attributes)
job_params.delete(:employer_attributes)
new(job_params) do |job|
job.company = Company.find_or_create_by_nip(company_attributes)
end
end
def create_employer(employer_attributes)
self.employer = Employer.create(employer_attributes)
end
end
控制器
class JobsController < ApplicationController
def new
@job = Job.new
if current_employer
@job.company = current_employer.companies.first
else
@job.company = Company.new
end
@job.employer = current_employer || Employer.new
end
def create
employer_attributes = params[:job][:employer_attributes]
@job = Job.initialize_with_company(params[:job])
if current_employer
@job.employer = current_employer
else
@job.create_employer(employer_attributes)
end
if @job.save
if current_employer
redirect_to dashboard_path
else
redirect_to jobs_path
end
else
render 'new'
end
end
end
查看
= simple_form_for @job do |f|
...
= f.simple_fields_for :company do |c|
...
= f.simple_fields_for :employer do |e|
...
= f.button :submit
http://stackoverflow.com/questions/1231608/rails-user-input-for-multiple-models-on-a-single-form-how –
更有幫助的討論... http://stackoverflow.com/questions/935650/accept-nested-attributes-for-child-association-validation-failing – Swards