我有以下从控制器切断的复杂方法:
def self.create_with_company_and_employer(job_params)
company_attributes = job_params.delete(:company_attributes)
employer_attributes = job_params.delete(:employer_attributes)
new(job_params) do |job|
job.employer = Employer.find_or_create_by_email(employer_attributes)
company_attributes[:admin_id] = job.employer.id if Company.find_by_nip(company_attributes[:nip]).nil?
job.company = Company.find_or_create_by_nip(company_attributes)
Employment.create(employer_id: job.employer.id, company_id: job.company.id)
end
end
我在这里使用了两个nested_attributes功能来创建公司和雇主。
您可以在此处找到整个代码:https://gist.github.com/2c3b52c35df763b6d9b4
company_attributes[:admin_id] = job.employer.id if Company.find_by_nip(company_attributes[:nip]).nil?
Employment.create(employer_id: job.employer.id, company_id: job.company.id)
基本上我想重构这两行:
答案 0 :(得分:0)
我看了你的要点,我认为这是一个设计问题。
你的就业和工作模式似乎有点多余,但我不知道他们的实际目的是什么,所以我现在无法真正帮助解决这个问题(我预感到你的架构可以改造与属于工作的雇员)。但是,如果您真的想要,可以使用after_create
回调来管理复制:
class Job < ActiveRecord::Base
after_create :create_corresponding_employment
def create_corresponding_employment
Employment.create( employer_id: employer.id, company_id: company.id )
end
end
这可以让你摆脱方法的最后一行。