ruby-on-rails - 如何显示属于某个诊断的所有病例?
问题描述
我是 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
非常感谢您提前。
解决方案
您想从诊断索引转到显示页面吗?如果是这样,您可以只使用索引中的 id,传递给显示,即正常流程。然后在您的诊断中显示您可以采取的行动
def show
@diagnosis = Diagnosis.includes(:cases).find_by(id: params[:id])
end
然后如果使用 erb 你可以遍历案例
<% @diagnosis.cases.each do |case| %>
<%= case.name %>
<% end %>
推荐阅读
- python - python函数参数中的三元运算符使用默认值
- c# - 在 azure 函数中获取队列名称或主题+订阅者名称(Azure 服务总线触发函数)
- amazon-web-services - AWS Neptune 中的元属性
- javascript - Javascript:当鼠标移过它们时突出显示所有段落,然后在鼠标经过后恢复
- javascript - 如何在 YII2 中使用 PJAX 处理来自控制器的错误?
- vue.js - 在 index.html 中使用 vue js 变量
- c# - Wix 安装程序实用程序:XmlFile
- ansible - 来自 jinja2 的 Ansible 模板
- python - 如何使用 pyautogui 使用 ubuntu 的“Windows”或“Super”键?
- python - Python selenium和chromedriver,最小化时不会加载chrome页面