1

私のモデルの要約:ユーザーには多くの予定があります。予定には多くの予約があります。予約は予定に属します。

特定の予定のすべての予約を一覧表示する特定のビュー(「users_bookings」と呼ばれる)にlink_toしようとしています。これが私が試したことです:

<% current_user.appointments.each do |appointment|%>
    <%= link_to "view all bookings", users_bookings_appointment_booking_path(appointment)%>
<%end%>

これは私が得るエラーです:

undefined method `users_bookings_appointment_bookings'

追加情報:

ルート:

resources :appointments do
    resources :bookings do
      get 'users_bookings', :on => :collection
    end        
  end

予約コントローラー作成アクション:

def create
    @appointment = Appointment.find(params[:booking][:appointment_id])
    @booking = @appointment.bookings.new(params[:booking])

予約コントローラーUsers_bookingsアクション:

def users_bookings
    @appointment = Appointment.find(params[:booking][:appointment_id])
    @bookings = @appointment.bookings.all
end

Users_bookingsビュー:

<% @bookings.each do |booking| %>
    <td><%= booking.appointment_date%></td>
    <td><%= booking.start_time %></td>
    <td><%= booking.end_time %></td>
<%end%>
4

3 に答える 3

1

そのURLのすべてのHTTPリクエスト(、、など)matchを本当に一致させたい場合を除いて、(他の人が示唆しているように)使用しないでください。代わりに、ブロック内のリソースへのルートを追加するだけです。GETPOSTdo

resources :appointments do
  resources :bookings do
    get 'user_bookings', :on => :collection
  end
end

これにより、GETリクエストのルートが「/ apointments /:appointment_id / bookings / user_bookings」に追加され、「bookings#user_bookings」にルーティングされます。

于 2012-10-03T23:45:09.320 に答える
0

予約コントローラーのインデックスアクションに変更します。そうすれば、「/ apointments / 1/bookings」と一致します。

ただし、それができない理由がある場合は、それが標準ルートの1つではないため、routes.rbファイルで指定する必要があります。何かのようなもの:

match '/appointments/:id/bookings/users_bookings' => 'bookings#users_bookings'
于 2012-10-03T23:35:31.290 に答える
0

コントローラで定義されたアクションを指すカスタムルートを定義しようとしましたか?

match 'appointments/:id/users_bookings' => 'bookings#users_bookings', :as => :users_bookings

resourcefullルートは、CRUDアクションの標準ルートを入力する負担から解放されますが、たとえば、リソースオブジェクトのPDFまたはCSVエクスポート用のダウンロードリンクを提供する場合は、カスタムルートで拡張できます。

次に、ビューファイルでusers_bookings_pathを使用して、アクションをポイントできます。

于 2012-10-03T23:40:58.563 に答える