@maxprof
Студент

Как вывести значение переменной контроллера для каждого пользователя (rails)?

Здравствуйте, у меня есть БД врачей. Там есть поле стоимости часа работы врача. В контроллере я считаю сколько у него пациентов, множу на стоимость работы и узнаю сколько доктор получил денег.
Самих докторов много, у каждого своя стоимость и количество пациентов. Я хочу вывести таблицу всех врачей больницы с графой, допустим "зарплата". Где будет указано сколько каждый из них получил денег(потом буду делать график).
Вот код контроллера. Код работает, но я думаю что можно сделать проще
class DoctorsController < ApplicationController
	before_action :set_doctor, only: [:show, :edit, :update, :destroy]
	def index
		@doctor = Doctor.all
	end

	def show
		@length =  User.where(doctor_id: params[:id]).size

		@length_length_for_seven_days = User.where("enter_date >= ?", 7.days.ago)
		@current_doctor_patients = @length_length_for_seven_days.where(doctor_id: params[:id]).size
		@hour_price = current_doctor.doctor_hour_price
		@current_money = @current_doctor_patients * @hour_price
	end

	private 

	 def set_doctor
        @doctor = Doctor.find(params[:id])
     end
    
end

Код вывода таблицы докторов:
<tbody>
  <tbody>
    <% @doctor.each do |doc| %>
      <tr>
        <td><%= doc.doctor_first_name %></td>
        <td><%= doc.doctor_second_name %></td>
        <td><%= @current_money %></td>
        <td><%= link_to 'Переглянути', doc %></td>
        <td><%= link_to 'Редагувати', edit_doctor_path(doc) %></td>
        <td><%= link_to 'Видалити', doc, method: :delete, data: { confirm: 'Are you sure?' } %></td>
      </tr>
    <% end %>
  </tbody>

Но вместо @current_money - пустые строки. А если напишу doc.current_money, то выдает ошибку. Возможно нужно сохранять значение этой переменной в БД и уже потом выводить. Подскажите как сделать пожалуйста.

Update
Код модели доктора. Поправочка. Пациенты у меня подписаны users
class Doctor < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable
  has_many :users
  has_many :prices
  has_many :news
  has_many :appointments

  def current_money
    doctor_hour_price*users.where("enter_date >= ?": 7.days.ago).count
  end
end
  • Вопрос задан
  • 443 просмотра
Решения вопроса 1
MAXOPKA
@MAXOPKA
В модели `Doctor` объяви метод `current_money`, который будет считать текущую зарплату.
Будет примерно так:

class Doctor < ActiveRecord::Base

  has_many :patients, class_name: 'User'

  def current_money
    doctor_hour_price.to_f * patients.where("enter_date >= ?", 7.days.ago).count
  end
end


<tbody>
  <tbody>
    <% @doctor.each do |doc| %>
      <tr>
        <td><%= doc.doctor_first_name %></td>
        <td><%= doc.doctor_second_name %></td>
        <td><%= doc.current_money %></td>
        <td><%= link_to 'Переглянути', doc %></td>
        <td><%= link_to 'Редагувати', edit_doctor_path(doc) %></td>
        <td><%= link_to 'Видалити', doc, method: :delete, data: { confirm: 'Are you sure?' } %></td>
      </tr>
    <% end %>
  </tbody>
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы