控制器无法访问表轨

时间:2013-08-16 09:03:07

标签: ruby-on-rails ruby

我是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个小时。

谢谢大家!!

2 个答案:

答案 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

通过这种方式,您可以知道您的令牌是否在请求中。希望它会有所帮助。感谢