问题是我无法从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
答案 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