Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 将appointment.id传递到booking.appointment\u id_Ruby On Rails_Ruby_Ruby On Rails 3_Parameter Passing - Fatal编程技术网

Ruby on rails 将appointment.id传递到booking.appointment\u id

Ruby on rails 将appointment.id传递到booking.appointment\u id,ruby-on-rails,ruby,ruby-on-rails-3,parameter-passing,Ruby On Rails,Ruby,Ruby On Rails 3,Parameter Passing,我有一个约会对象和一个预订对象。预约属于预约,预约有很多预约 我想在创建时将约会ID传递给bookings.appointment\u ID。我该怎么做 *我已经根据乔丹安德烈的建议编辑了我的代码。现在我得到以下错误: NoMethodError in BookingsController#new undefined method `bookings' for nil:NilClass 在我的主页视图中,我有: <% @appointments.each do |appointment

我有一个约会对象和一个预订对象。预约属于预约,预约有很多预约

我想在创建时将约会ID传递给bookings.appointment\u ID。我该怎么做

*我已经根据乔丹安德烈的建议编辑了我的代码。现在我得到以下错误:

NoMethodError in BookingsController#new
undefined method `bookings' for nil:NilClass 
在我的主页视图中,我有:

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

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

Rails关联允许您基于现有记录创建记录。目前,对于从表单传递到控制器的参数,您有点过火了

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

@booking = @appointment.bookings.new(params[:booking])
这将获取已存在的
@约会
记录的id,并将其设置在新的
@booking
实例变量上

还有,我想看看。不确定这两种型号的当前路线是什么样子,但可能是这样的:

resources :appointments do
  resources :bookings
end

这将为您拥有
新预订路径的表单提供一种更干净的方法。它将更改为
新的预约路径(@appointment)
。这会将约会ID传递给您的预订管理员,您可以在那里为约会创建相关记录。

谢谢Jordan,我更新了代码。现在程序正在传入正确的appointment\u id参数,但我收到一个no-method错误。如何解决此问题?在执行
@booking=@appointment.bookings.new(params[:booking])
之前,是否确定在
创建
控制器方法中设置了@appointment实例变量?这是什么样子的?我将@appointment=appointment.find(params[:appointment\u id])放在前面,得到了以下错误:没有id就找不到约会您是否遵循了我上面提出的嵌套资源路由建议?这将在URL参数中为您提供约会id。“无方法”错误和“约会”错误是由于约会id未传递给您的
create
方法而导致的。我在那里有它。我还有一个额外的(资源:预订)在嵌套的之外。删除它会导致以下错误:没有与[POST]“/bookings”匹配的路线。
resources :appointments do
  resources :bookings
end