1

私は単純なモデルを持っています: 開業医は予定とタイムカードを持っています (特定の日にどれだけの時間が働いたか.

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 を指定します。

レールがこのルートを解決できないのはなぜですか?

4

3 に答える 3

1

これを試して、コンソールで何かが変わるかどうかを確認してください...

shallow do
  resources :locations do
    resources :practitioners do
      resources :timecards 
      resources :appointments
    end
  end
end
于 2013-03-29T22:58:47.277 に答える
1

問題は、最初のリクエストの予定コントローラーへのルーティングではなく、表示/編集をレンダリングするときに、予定コントローラー/ビューが有効な予定を渡さずにリンクを作成しようとしていると思われます。私が正しければ、スタック トレースはおそらくlink_tourl_for、またはappointment_path呼び出しを指しますが、予定コントローラーの実行を既に開始しているというコンテキストで

この理論をテストするもう 1 つの方法は、論理をAppointmentController.show/editクリアし、そのビューもクリアすることです。

于 2013-03-29T23:01:50.087 に答える
0

これはRails 3 の link_to ルート (編集) ネストされたリソースに役立つと思います

于 2013-03-29T23:00:42.243 に答える