Ошибка при попытке ссылки на профиль пациента - PullRequest
0 голосов
/ 18 января 2019

Я получаю сообщение об ошибке при попытке связать профиль пациента, когда провайдер просматривает его список пациентов.У меня нет проблем с отображением всех имен пациентов, принадлежащих поставщику, но при попытке связать их с профилем пациента я получаю неопределенный идентификатор метода.

Таким образом, способ, которым он работает, позволяет пациентам искатьдля провайдеров и добавьте их в модель List.Что касается поставщика, я просто перечисляю всех пациентов, которые добавили этого конкретного поставщика.Вот мой код ошибки ниже,

<div class="body">
            <div class="body">
            <% if @active_patients.count > 0 %>
                <table>
                  <thead>
                    <tr>
                      <th>Patient Name</th>
                      <th>Actions</th>
                    </tr>
                  </thead>
                  <tbody>
                    <% @active_patients.each do |list| %>
                      <tr>
                        <td>
                            <%= list.patient.role.user.first_name %> <%= list.patient.role.user.last_name %>
                        </td>
                        <td>
                            <%= link_to patient_path(id: @patient.id), class: "btn" do %>View<% end %> . #### THIS IS THE LINE
                        </td>
                      </tr>
                    <% end %>
                  </tbody>
                </table>
            <% else %>
                <div class="no-records">
                    <%= image_tag "icon-no-records", class: "image" %>
                    <div class="text">You have no patients.</div>
                </div><!--no-records-->
            <% end %>
        </div><!--body-->
    </div>

Вот моя List модель,

class List < ApplicationRecord
    belongs_to :membershipable, :polymorphic => true
    belongs_to :provider  

    def patient
      membershipable_type=='Patient' ? membershipable : nil
    end

    def provider_user
        patient.try(:user)
    end
end

Также вот сообщение об ошибке ->

enter image description here

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Здесь:

<% @active_patients.each do |list| %>
  <tr>
    <td>
      <%= list.patient.role.user.first_name %> <%= list.patient.role.user.last_name %>
    </td>
    <td>
      <%= link_to patient_path(id: @patient.id), class: "btn" do %>View<% end %> . #### THIS IS THE LINE
    </td>
  </tr>
<% end %>

у вас есть переменная list.Похоже, что вы получаете patient, выполняя list.patient, как здесь:

<%= list.patient.role.user.first_name %> <%= list.patient.role.user.last_name %>

Но затем вы пытаетесь использовать переменную с именем @patient, здесь:

<%= link_to patient_path(id: @patient.id), class: "btn" do %>View<% end %> .

когда у вас нет переменной @patient.Итак, вы получаете ошибку nil.

Вместо этого, кажется, вы должны сделать:

<%= link_to patient_path(id: list.patient.id), class: "btn" do %>View<% end %> .

Или, как указывает Милгнер, вы можете просто сделать:

<%= link_to patient_path(list.patient), class: "btn" do %>View<% end %> .

Также вы можете захотетьпосмотрите на Закон Деметры , который вы нарушаете (IMO), когда вы делаете:

list.patient.role.user.first_name
0 голосов
/ 18 января 2019

Пусть Rails сделает работу по созданию пути. Каждая модель ActiveRecord имеет метод to_param, который решает, как экземпляр будет закодирован в URL. По умолчанию он возвращает идентификатор модели, но это также может быть слаг, основанный на заголовке или другом свойстве модели.

Вызов вашего помощника как patient_path(patient) должен помочь.

Кроме того, в вашем текущем коде вы ссылаетесь на ранее не использованную переменную @patient, даже если кажется, что вместо этого вы хотите сослаться на list.patient.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...