Rails 将值添加到引用 table 未保存

Rails adding values to referenced table not saved

我已经创建了如下图所示的数据库模式

问题是我无法从作业控制器向我的 job_services table 添加数据。

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

代码

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) 你的联想和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