Rails将值添加到未保存的引用表中

时间:2016-11-29 07:18:09

标签: ruby-on-rails ruby-on-rails-5

我创建了数据库架构,如enter image description here

下面的图片

问题是我无法从Job控制器向job_services表添加数据。

我尝试使用以下代码,但无法将记录保存到任何表格中。

代码

def create_job
@job = Job.new(
    job_code: user_params['job_code'],
    expect_comp_date: user_params['expected_completion_date'],
    actual_comp_date: user_params['actual_completion_date'],
    job_note: user_params['job_note']
)

@job.customer = Customer.find(user_params['customer_id'])

@service = Service.find(user_params['service_id'])
@jobservice = JobService.new(service_note: "Test Note", status: 'Test Status')
@job.jobservices.service  = @service


if @job.valid?
  if @job.save
    render :json => {"status" => 'S1000', "description" => 'Job Created'}
  end
else
  render :json => {"status" => 'E1000', "description" => @job.errors.messages}
end
end

我的模型类

//Job Model
class Job < ApplicationRecord
   has_many :jobservices
   belongs_to :customer
end

//Job Service Model
class JobService < ApplicationRecord
  belongs_to :job
end

//Service Model
class Service < ApplicationRecord
end

1 个答案:

答案 0 :(得分:1)

1)您提出的关联以及rails的命名约定在您的问题中是错误的。

2)您的控制器中存在语法错误和代码更改,即您尝试在创建作业之前创建作业服务。

您只能将作业服务分配给已保存的作业。

这是正确的方法,

<强>型号:

//Job Model

class Job < ApplicationRecord
   has_many :jobservices
   belongs_to :customer
end

//Job Service Model

class Jobservice < ApplicationRecord
  belongs_to :job
  belongs_to :service
end

//Service Model

class Service < ApplicationRecord
    has_many :jobservices
end

<强>控制器:

def create_job
    @job = Job.new(
        job_code: user_params['job_code'],
        expect_comp_date: user_params['expected_completion_date'],
        actual_comp_date: user_params['actual_completion_date'],
        job_note: user_params['job_note']
    )

    @job.customer = Customer.find(user_params['customer_id'])

    @service = Service.find(user_params['service_id'])

    if @job.valid?

      if @job.save

        @service = Service.find('3') 

        @jobservice = Jobservice.new(service: @service, service_note: "Test Note", status: 'Test Status')

        @job.jobservices << @jobservice


        render :json => {"status" => 'S1000', "description" => 'Job Created'}
      end
    else
      render :json => {"status" => 'E1000', "description" => @job.errors.messages}
    end
end