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
我已经创建了如下图所示的数据库模式
问题是我无法从作业控制器向我的 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