无法呈现(双)嵌套表单

时间:2018-08-21 06:22:21

标签: ruby-on-rails ruby-on-rails-5 simple-form

我有3个模型,分类,分类价格和预订。 ClassPrices属于Classes,而Bookings属于ClassPrices。我在ClassPrices页面上无法显示“预订”表单。

1。 route.rb

resources :classses do
  resources :class_prices do
    resources :bookings
  end
end

2。 class_price.rb

class ClassPrice < ApplicationRecord
  belongs_to :classs
  has_many :bookings
end

3。 bookings.rb

class Booking < ApplicationRecord
  belongs_to :user
  belongs_to :class_price
end

4。 bookings_controller.rb

def new
  @booking = Booking.new
end    

我使用的是Simple Form gem,由于我可以拥有的代码量有限,所以这是表单的标题:

<%= simple_form_for [@classs.class_prices, @class_price.bookings.new] do |f| %>

我得到的错误是:

undefined method `to_model' for #<ClassPrice::ActiveRecord_Associations_CollectionProxy:0x00007fcf01a70ff8>
Did you mean?  to_xml

编辑:

5。 class_prices_controller.rb

def show
  @classs = Classs.find(params[:classs_id])
  @class_price = ClassPrice.find(params[:id])
  @booking = Booking.new
  @classs.class_prices.find(params[:id]).bookings.create(booking_params)
end

1 个答案:

答案 0 :(得分:2)

  

ClassPrice :: ActiveRecord_Associations_CollectionProxy:0x00007fcf01a70ff8的未定义方法“ to_model”

@classs.class_prices返回一个集合,并且simple_form_for(或任何其他表单助手)中的第一个参数应该从不集合。我相信应该是

<%= simple_form_for [@class_price, @class_price.bookings.new] do |f| %>

更新

根据您的路线,应该是

<%= simple_form_for [@classs, @class_price, @booking] do |f| %>