首页 > 解决方案 > 如何显示属于某个诊断的所有病例?

问题描述

我是 Ruby on Rails 的新手,希望得到任何支持!

用户可以创建案例并通过下拉菜单选择特定的诊断。管理员(称为“rki”)可以查看数据库中所有诊断的列表。现在我正在尝试实现管理员可以选择一个特定的诊断并获得所有病例的列表,以及该诊断。

这是我的RkisController

class RkisController < ApplicationController
  before_action :authenticate_user!
  before_action :current_user_rki?

  def current_user_rki?
    return if current_user.role == 'rki'
    redirect_to root_path
  end

  def index
    @diagnoses = Diagnosis.all
  end

  def all_cases
    #show all cases with a certain diagnosis
  end
end

这是我的案例模型

class Case < ApplicationRecord
  belongs_to :user
  belongs_to :diagnosis
  belongs_to :district
end

诊断

class Diagnosis < ApplicationRecord
  has_many :cases
end

案例控制器

class CasesController < ApplicationController
  before_action :set_case, only: [:show, :edit, :update, :destroy, :confirm]
    
  def index
    @cases = current_user.cases
  end

  def show
  end

  def new
    @case = Case.new
    @case.user_id = current_user.id
  end


  def edit
  end

  def create
    @case = Case.new(case_params) do |c|
      c.user_id = current_user.id
    end

    @case.district = current_user.district

    respond_to do |format|
      if @case.save
        format.html { redirect_to @case, notice: 'Case was successfully created.' }
        format.json { render :show, status: :created, location: @case }
      else
        format.html { render :new }
        format.json { render json: @case.errors, status: :unprocessable_entity }
      end
    end
  end

  def update
    respond_to do |format|
      if @case.update(case_params)
        format.html { redirect_to @case, notice: 'Case was successfully updated.' }
        format.json { render :show, status: :ok, location: @case }
      else
        format.html { render :edit }
        format.json { render json: @case.errors, status: :unprocessable_entity }
      end
    end
  end

  def destroy
    @case.destroy
    respond_to do |format|
      format.html { redirect_to cases_url, notice: 'Case was successfully destroyed.' }
      format.json { head :no_content }
    end
  end

  private

    def allowed_to_create
      redirect_to root_path unless current_user.role.in?(['arzt', 'labor'])
    end

    def set_case
      @case = Case.find(params[:id])
    end

    def case_params
      params.require(:case).permit(:first_name, :last_name, :gender,:birthdate, :place_of_residence,
        :diagnosis_id, :user_id, :case_id, :confirmed_at, :district_id)
    end
end

诊断控制器

class DiagnosesController < ApplicationController
  before_action :set_diagnosis, only: [:show, :edit, :update, :destroy]

  def index
    @diagnoses = Diagnosis.all
  end

  def show
  end

  def new
    @diagnosis = Diagnosis.new
  end

  def edit
  end

  def create
    @diagnosis = Diagnosis.new(diagnosis_params)

    respond_to do |format|
      if @diagnosis.save
        format.html { redirect_to @diagnosis, notice: 'Diagnosis was successfully created.' }
        format.json { render :show, status: :created, location: @diagnosis }
      else
        format.html { render :new }
        format.json { render json: @diagnosis.errors, status: :unprocessable_entity }
      end
    end
  end

  def update
    respond_to do |format|
      if @diagnosis.update(diagnosis_params)
        format.html { redirect_to @diagnosis, notice: 'Diagnosis was successfully updated.' }
        format.json { render :show, status: :ok, location: @diagnosis }
      else
        format.html { render :edit }
        format.json { render json: @diagnosis.errors, status: :unprocessable_entity }
      end
    end
  end

  def destroy
    @diagnosis.destroy
    respond_to do |format|
      format.html { redirect_to diagnoses_url, notice: 'Diagnosis was successfully destroyed.' }
      format.json { head :no_content }
    end
  end

  private

    def set_diagnosis
      @diagnosis = Diagnosis.find(params[:id])
    end

    def diagnosis_params
      params.require(:diagnosis).permit(:illness)
    end
end

非常感谢您提前。

标签: ruby-on-rails

解决方案


您想从诊断索引转到显示页面吗?如果是这样,您可以只使用索引中的 id,传递给显示,即正常流程。然后在您的诊断中显示您可以采取的行动

def show
  @diagnosis = Diagnosis.includes(:cases).find_by(id: params[:id])
end

然后如果使用 erb 你可以遍历案例

<% @diagnosis.cases.each do |case| %>
  <%= case.name %>
<% end %>

推荐阅读