【问题标题】:routing error: Passing a parameter to an action in controller路由错误:将参数传递给控制器​​中的操作
【发布时间】:2012-09-24 22:44:06
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    您不应该使用match(正如其他人所建议的那样),除非您确实想要匹配该 URL 的所有 HTTP 请求(GETPOST 等)。相反,只需在 do 块中添加到资源的路由:

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

    这将为 GET 请求添加一个附加路由到 `/appointments/:appointment_id/bookings/user_bookings' 并将其路由到 'bookings#user_bookings'。

    【讨论】:

    • 谢谢。非常感谢您的帮助。
    【解决方案2】:

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

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

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

    【讨论】:

    • 谢谢。非常感谢您的帮助。
    【解决方案3】:

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

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

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

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

    【讨论】:

    • 谢谢。非常感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-16
    • 2017-01-12
    • 1970-01-01
    • 2012-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多