私は単純なモデルを持っています: 開業医は予定とタイムカードを持っています (特定の日にどれだけの時間が働いたか.
Practioners#show は、開業医と関連する予定/タイムカードを提示するので、それらを表示または編集 (または新しいものを追加) できます。
意見:
<% if @practitioner.timecard.count > 0 %>
<p><strong>Time Card List</strong></p>
<table>
<tr>
<th>Hours</th>
<th>Date</th>
<th></th>
<th></th>
<th></th>
</tr>
<% @practitioner.timecard.order("activity_date ASC").each do |t| %>
<tr>
<td><%= t.hours_worked %></td>
<td><%= t.activity_date %></td>
<td />
<td><%= link_to 'Edit', edit_timecard_path([t.id]) %></td>
<td><%= link_to 'Show', timecard_path([t.id]) %></td>
<% end %>
</table>
<% else %>
<p><strong>No Time Cards to display</strong></p>
<% end %>
<%= link_to "[Add Time Card]", new_practitioner_timecard_path(@practitioner) %>
<% if @practitioner.appointment.count > 0 %>
<p><strong>Appointment List</strong></p>
<table>
<tr>
<th>Name</th>
<th>Date</th>
<th>Duration</th>
<th>New?</th>
<th></th>
<th></th>
<th></th>
</tr>
<% @practitioner.appointment.order("appointment_date ASC").each do |r| %>
<tr>
<td><%= r.patient.name %></td>
<td><%= r.appointment_date %></td>
<td><%= r.duration %> </td>
<td><%= r.first_time %></td>
<td />
<td><%= link_to 'Edit', edit_appointment_path(r.id) %></td>
<td><%= link_to 'Show', appointment_path(r.id) %></td>
<% end %>
</table>
<% else %>
<p><strong>No Appointments to display</strong></p>
<% end %>
ルート:
get "welcome/index"
get "admin/index"
resources :patients
resources :locations, :shallow => true do
resources :practitioners, :shallow => true do
resources :timecards, :shallow => true
resources :appointments, :shallow => true
end
end
レーキルートを実行すると、はっきりとわかります
edit_appointment GET /appointments/:id/edit(.:format) appointments#edit
appointment GET /appointments/:id(.:format) appointments#show
タイムカードの [編集] または [表示] をクリックすると、正常に機能します。予定の編集または表示をクリックすると、エラーが発生します。
No route matches {:action=>"edit", :controller=>"appointments", :id=>nil}
しかし、ブラウザーで、予定の表示リンクのマウスオーバーが次のようになっていることがわかります: localhost:3000/appointments/6
編集の場合は、localhost:3000/appointments/6/edit を指定します。
レールがこのルートを解決できないのはなぜですか?