Tell me more ×
Code Review Stack Exchange is a question and answer site for peer programmer code reviews. It's 100% free, no registration required.

I want to create Job, Employer and Company using one form.

Model

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

Controller

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

View

= simple_form_for @job do |f|
  ...
      = f.simple_fields_for :company do |c|
  ...
      = f.simple_fields_for :employer do |e|
  ...
    = f.button :submit

But the goal is: I want to create Job only if Job,Company and Employer are valid.

share|improve this question
This should have been posted on StackOverflow; it is a how-to question. – Mark Thomas Apr 22 at 16:33
It's not possible to migrate this question because it is too old; it will be closed once the bounty has been awarded. – codesparkle Apr 22 at 16:34

closed as off topic by Winston Ewert Apr 22 at 17:24

Questions on Code Review Stack Exchange are expected to relate to code review request within the scope defined in the FAQ. Consider editing the question or leaving comments for improvement if you believe the question can be reworded to fit within the scope. Read more about closed questions here.

1 Answer

up vote 1 down vote accepted

Try with Extract form objects (number 3) from this post.

share|improve this answer

Not the answer you're looking for? Browse other questions tagged or ask your own question.