路由错误:将参数传递给控制器​​中的操作

时间:2012-10-03 23:01:03

标签: ruby-on-rails routing parameter-passing rails-routing link-to

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

我正在尝试链接到列出特定约会的所有预订的特定视图(称为“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%>

3 个答案:

答案 0 :(得分:1)

您不应该使用match(正如其他人建议的那样),除非您确实要匹配所有 HTTP请求(GETPOST等。 )该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指向操作