2013-08-16 122 views
0

我是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 pat = Patient.find_by_remember_token(token)不起作用。

有没有人可以找出为什么会发生这种情况?

在此先感谢。

SOLUTION:

首先感谢所有为您的线索,它指引我的解决方案。由于调试器宝石,我可以看到“真正”发送给Patient.find_by_remember_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

确实票面[:patient_token]存在?什么是它的价值是什么? –

+0

是的,值:“X6MlhaRLFMoZRkYaGiojfA” –

+0

因此它清楚地表明这一remember_token没有患者在数据库中存在。 –

回答

0

尝试使用这个搜索Patient.where(:remember_token => token)这应该工作。

+0

Nop。它没有。不管怎么说,还是要谢谢你。 –

+0

您是否在数据库中验证过该特定标记的数据是否存在? – dirtydexter

+0

是的,我做到了。 1.9.3p448:001> Patient.find_by_remember_token(“X6MlhaRLFMoZRkYaGiojfA”)患者负荷(1.4ms)SELECT“patients”。* FROM“patients”WHERE“patients”。“remember_token”='X6MlhaRLFMoZRkYaGiojfA'LIMIT 1 =>#<患者编号:2083,doctor_id:12,姓名:[“Adelia”,“O'Hara”],年龄:37岁,性别:“男性”,电子邮件:“[email protected]”,电话:无,password_digest:“ $ 2a $ 10 $ PkzQOdfkIzHQHfrjJ6xWVe57dUbWyhxfB6SNQ6m.elEP ...“,day_active:nil,remember_token:”X6MlhaRLFMoZRkYaGiojfA“,created_at:”2013-08-10 14:57:22“,updated_at:”2013-08-10 14:57:> - –

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 

这样,你就可以知道,如果你的令牌请求或不来了。希望它会有所帮助。由于

+0

同样的错误,我试图调试它,但它确实很奇怪。 –