我是 Rails 的新手,我正在开发一个包含 3 个控制器/模型的应用程序:医生、患者和报告。医生有很多病人,病人属于医生,病人有很多报告,报告属于病人。
要通过 API 从外部创建病人,我在控制器中有这个:
def create
if doc=params[:patient]
doctor_id=doc[:doctor]
else
puts 'NO PARAMS' =># this is just to monitor the status in the server
end
doctor=Doctor.find(doctor_id)
@patient=doctor.patients.new(
name: doc[:name],
email: doc[:email],
sex: doc[:sex],
password: doc[:password],
password_confirmation: doc[:password_confirmation])
if @patient.save
render json: { success: true, data: @patient.remember_token, status: :created }
else
render json: { success: false, data: @patient.errors, status: :unprocessable_entity }
end
end
这按预期工作:从参数中,我可以检索医生 ID 并创建一个与他相关的新患者。
但是当我对报告做同样的事情时,奇怪的事情就出现了。在我的控制器中,我有:
def create
par=params[:report]
token=par[:patient_token]
pat=Patient.find_by_remember_token(token)
puts pat =>#this is to monitor the server
last_report=pat.reports.last
puts last_report =>#this is to monitor the server
if ((Time.now-last_report.created_at)/86400).round>0
report=create_report(par[:patient_token])
report.attributes=par
if report.save
render json: { success: true, data: report, status: :created }
else
render json: { success: false, data: report.errors, status: :unprocessable_entity }
end
else
last_report.attributes=par
if last_report.save
render json: { success: true, data: last_report, status: :created }
else
render json: { success: false, data: last_report.errors, status: :unprocessable_entity }
end
end
end
而这一次服务器崩溃并且不检索患者。pat=nil 所以 pat=Patient.find_by_remember_token(token) 不起作用。
有谁可以弄清楚为什么会这样?
提前致谢。
解决方案:
首先感谢大家提供的线索,它引导我找到解决方案。感谢调试器 gem,我可以看到“真正”发送给 Patient.find_by_remember_token(token) 的令牌在某种程度上是错误的。我是说。我正在通过
puts token => 返回 "X6MlhaRLFMoZRkYaGiojfA" (正确的 token)
但是通过调试器我意识到发送的真正令牌是
"\"X6MlhaRLFMoZRkYaGiojfA\"" 这绝对是错误的,所以我用下一种方式修改了我的 curl 查询:
ORIGINAL CURL: curl -X POST -d 'report[patient_token]="X6MlhaRLFMoZRkYaGiojfA"&repo
MODIFIED ONE: curl -X POST -d 'report[patient_token]=X6MlhaRLFMoZRkYaGiojfA&repo
然后它起作用了……该死的延迟了 5 个小时。
谢谢大家!!