我正在尝试在rails的belongs_to模型关联中构建has_many模型。关联正确,但是显示错误“必须存在”。我尝试将optional:true设置为正确,但似乎不起作用。
模型
class User::Product < ApplicationRecord
has_one: :promo_code
end
class User::PromoCode < ApplicationRecord
belongs_to: :product, optional: true
accepts_nested_attributes_for :product
end
PromoCodesController
def new
@promo_code = User::PromoCode.new
@product.build_product
end
def create
@promo_code = User::PromoCode.new(promo_code_params)
@promo_code.save
end
def promo_code_params
params.require(:user_promo_code).permit(:product_id, :product_attributes => [:name])
end
表格
form_with(model: promo_code) do |form|
form.fields_for :product do |f|
f.text_field :name
end
end
当表单保存时,会出现一个错误消息,指出“必须存在”,我假设这是指belongs_to中的外键。
任何关于我做错事的想法?我认为上面的代码是我与此问题相关的唯一相关代码。
答案 0 :(得分:1)
查看由@engineersmnky链接的问题,看起来这是使用accepts_nested_attributes_for
时的已知错误。
这可以通过使用inverse_of
选项来阐明双向关系来解决:
class User::Product < ApplicationRecord
has_one: :promo_code, inverse_of: :product
end
class User::PromoCode < ApplicationRecord
belongs_to: :product, optional: true, inverse_of: :promo_code
accepts_nested_attributes_for :product
end
尝试一下,看看它是否可以解决您的问题。
答案 1 :(得分:1)
分别在模型中尝试
has_one :promo_code, -> { PromoCode.order(:id) }, class_name: 'PromoCode',inverse_of: :product
belongs_to :product, inverse_of: :promo_code