我的模型摘要:用户有很多约会。约会有很多预订。预订属于预约。
我正在尝试链接到列出特定约会的所有预订的特定视图(称为“users_bookings”)。这是我尝试过的:
<% 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%>
答案 0 :(得分:1)
您不应该使用match
(正如其他人建议的那样),除非您确实要匹配所有 HTTP请求(GET
,POST
等。 )该URL。相反,只需在do
块中添加到资源的路径:
resources :appointments do
resources :bookings do
get 'user_bookings', :on => :collection
end
end
这将为{/约会/:appointment_id / bookings / user_bookings'添加GET
请求的附加路由,并将其路由到'bookings#user_bookings'。
答案 1 :(得分:0)
我会将其更改为预订控制器的索引操作。这样就可以匹配&#39; / appointmentments / 1 /预订&#39;。
但是,如果您不能这样做,因为它不是标准路线之一,您需要在routes.rb文件中指定它。类似的东西:
match '/appointments/:id/bookings/users_bookings' => 'bookings#users_bookings'
答案 2 :(得分:0)
您是否尝试定义指向控制器中已定义操作的自定义路由,例如:
match 'appointments/:id/users_bookings' => 'bookings#users_bookings', :as => :users_bookings
resourcefull路由只会减轻您为CRUD操作键入标准路由的负担,但可以使用自定义路由进行扩展,例如,如果您要为资源对象的PDF或CSV导出提供下载链接
然后,您可以在视图文件中使用users_bookings_path指向操作