1

我的模型摘要:一个用户有很多约会。一个约会有很多预订。预订属于约会。

我正在尝试链接到一个特定视图(称为“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%>
4

3 回答 3

1

match除非您真的想匹配该 URL 的所有HTTP 请求(GET,POST等),否则您不应该使用(正如其他人所建议的那样)。相反,只需向do块中的资源添加路由:

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

这将为向“/appointments/:appointment_id/bookings/user_bookings”的请求添加额外的路由,GET并将其路由到“bookings#user_bookings”。

于 2012-10-03T23:45:09.320 回答
0

您是否尝试定义指向控制器中已定义操作的自定义路由,例如:

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

资源丰富的路线只是减轻您为 CRUD 操作键入标准路线的负担,但可以使用自定义路线进行扩展,例如,如果您想为资源对象的 PDF 或 CSV 导出提供下载链接

然后,您可以在视图文件中使用 users_bookings_path 来指向操作

于 2012-10-03T23:40:58.563 回答
0

我会将其更改为预订控制器的索引操作。这样它将匹配'/appointments/1/bookings'。

但是,如果有原因您不能这样做,因为它不是标准路由之一,您需要在 routes.rb 文件中指定它。就像是:

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