0

我有一个约会对象和一个预订对象。Bookings 属于 Appointments 和 Appointments has_many bookings。

我想在创建时将约会 ID 传递给 bookings.appointment_id。我怎样才能做到这一点?

*我已根据 jordanandree 的建议编辑了我的代码。现在我收到以下错误:

NoMethodError in BookingsController#new
undefined method `bookings' for nil:NilClass 

在我的主页视图中,我有:

<% @appointments.each do |appointment| %>
    <%= link_to "new Booking", new_appointment_booking_path(appointment)%>
<%end%>

预订控制器:

def new
    @booking = @appointment.bookings.new 
    ...

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

路线

resources :appointments do
    resources :bookings
 end

非常感谢您的帮助。

耙路线:

   POST   /appointments/:appointment_id/bookings(.:format)  bookings#create 
   GET    /appointments/:appointment_id/bookings/new(.:format)  bookings#new
   GET    /appointments/:appointment_id/bookings/:id/edit(.:format) bookings#edit
4

1 回答 1

2

Rails 关联允许您基于现有记录创建记录。您当前所拥有的对于从表单传递到控制器的参数来说有点矫枉过正。

例如,您可以更改create方法以遵循您为 Booking 和 Appointment 模型声明的相同关联模式:

@booking = @appointment.bookings.new(params[:booking])

这将获取已经存在的@appointment记录的 id 并将其设置在新的@booking实例变量上。

另外,我会看看嵌套资源路由。不确定您的路线目前对于这两个模型是什么样的,但它可能看起来像这样:

resources :appointments do
  resources :bookings
end

这将为您拥有的表单提供更简洁的方法new_booking_path。它会变成new_appointment_booking_path(@appointment). 这会将约会的 ID 传递给您的预订控制器,您可以在其中为约会创建关联的记录。

于 2012-09-29T17:06:28.577 回答