Это может сработать для вас:
perl test.pl | tee -i /dev/stderr | sed -f sed.sed > test.log
Программа perl переключит свой вывод на стандартный вывод. Тройка выйдет на сцену и примет ее как stdin и выкачайте ее в stderr и stdout. Программа sed будет принимать stdout и принять ее как stdin и выкачать ее из stdout, которая перенаправляет ее на test.log
. Stderr будет направлен на терминал.
N.B. Это может привести к нежелательным побочным эффектам.
Пусть Rails сделает работу по созданию пути. Каждая модель ActiveRecord имеет метод to_param
, который решает, как экземпляр будет закодирован в URL. По умолчанию он возвращает идентификатор модели, но это также может быть слаг, основанный на заголовке или другом свойстве модели.
Вызов своего помощника, как patient_path(patient)
, должен помочь.
Кроме того, в вашем текущем коде вы ссылаетесь на ранее не использованную переменную @patient
, хотя похоже, что вместо этого вы хотите обратиться к list.patient
.
Здесь:
<% @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
, здесь:
когда у вас нет переменной @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