2015-12-03 24 views
0

我想只显示来自用户寄存器(患者)(军医)创建寄存器只显示寄存器从CURRENT_USER轨道4

在我的控制,我有:

def index 
    # @patients = Patient.all 
    @medic = Medic.find(params[:id]) 
    @patients = @medic.patients 
    end 

我得到错误:无法与“ID” =

在我看来,找到军医,我有:

<% @patients.each do |patient| %> 
    <%= patient.name %> 
<% end %> 

在我的模式ls我有:

class Medic < ActiveRecord::Base 
    has_many :patients 
end 

class Patient < ActiveRecord::Base 
    belongs_to :medic 
end 

¿我该怎么做?

感谢您的帮助!

回答

1

您的index方法默认情况下不能有params[:id];它是一条不是会员路线的收集路线。所以总是params[:id]nil

如果你想的一定medic指数患者可以去localhost:3000/patients?medic_id=x并在控制器中使用

if params[:medic_id] 
    @patients = Patient.where(medic_id: params[:medic_id]).all 
else 
    @patients = Patient.all 
end 

如果使用devise,你必须定义一个current_medic然后就得到患者使用

@patients = current_medic.patients 

localhost:3000/patients现在将显示病人或记录在当前军医用户。

您必须将before_action :authenticate_medic!添加到您的控制器。

+0

我按照你的建议尝试,但是当我注销并登录时,另一个用户(我正在使用omniauth-google-oauth2)显示与创建记录的用户完全相同的记录 –

+0

那么如何管理医生,患者,咨询,和处方?,我不能把before_action:authenticate_medic !,它重新将我设计成一个log_in路径的设计,但我用omniauth记录... –