2016-09-06 61 views
6

我下面的教程:http://www.amooma.de/screencasts/2015-01-22-nested_forms-rails-4.2/Rails的嵌套形式的錯誤,孩子必須存在

我usign Rails的5.0.0.1

但是,當我註冊一個酒店,它似乎是酒店類必須存在。

1錯誤,無法儲存禁止該酒店:類別酒店必須 存在

我的酒店模式:

class Hotel < ApplicationRecord 
    has_many :categories, dependent: :destroy 
    validates :name, presence: true 
    accepts_nested_attributes_for :categories, reject_if: proc { |attributes| attributes['name'].blank? }, allow_destroy: true 
end 

我的類別模型:

class Category < ApplicationRecord 
    belongs_to :hotel 
    validates :name, presence: true 
end 

我的酒店控制器:

def new 
    @hotel = Hotel.new 
    @hotel.categories.build 
end 

def hotel_params 
    params.require(:hotel).permit(:name, categories_attributes: [ :id,:name]) 
end 

末我_form.html.erb

回答

17

belongs_to行爲rails >= 5.x發生了變化。實質上,現在預計belongs_to記錄在分配給關聯的另一側之前存在。你需要通過required :false,而在你的Category模型聲明belongs_to如下:

class Category < ApplicationRecord 
    belongs_to :hotel, required: false 
    validates :name, presence: true 
end 
+1

感謝您的幫助,我看到'inverse_of :: categories'也適用。 –

+2

謝謝達拉姆,這有幫助。另外,請注意'required:false'已被棄用(來源:https://github.com/rails/rails/pull/18937)。更好地使用'belongs_to:hotel,可選:true' – htaidirt