我是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
这可以按预期工作:从params我可以检索doctor_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 so pat = Patient.find_by_remember_token(token)不起作用。
有没有人能弄清楚为什么会这样?
提前致谢。
解决方案:
首先感谢所有的线索,它指导我解决方案。多亏了调试器gem,我可以看到“真的”被发送到Patient.find_by_remember_token(令牌)的令牌在某种程度上是错误的。我的意思是。我通过
在服务器上捕获令牌puts token =>返回“X6MlhaRLFMoZRkYaGiojfA”(正确的标记)
但通过调试器我意识到发送的真实令牌是
“\”X6MlhaRLFMoZRkYaGiojfA \“”这绝对是错误的,所以我以下一种方式修改了我的卷曲查询:
ORIGINAL CURL: curl -X POST -d 'report[patient_token]="X6MlhaRLFMoZRkYaGiojfA"&repo
MODIFIED ONE: curl -X POST -d 'report[patient_token]=X6MlhaRLFMoZRkYaGiojfA&repo
然后它起作用了......该死的5个小时。
谢谢大家!!
答案 0 :(得分:0)
尝试使用它来搜索Patient.where(:remember_token => token)
这应该有效。
答案 1 :(得分:0)
试试这样:
def create
token = params[:report][:patient_token]
if token
pat=Patient.find_by_remember_token(token)
puts pat =>#this is to monitor the server
else
puts "No params"
end
end
通过这种方式,您可以知道您的令牌是否在请求中。希望它会有所帮助。感谢