加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 如果父模型是新模型且在子模型中为非NULL,则不

发布时间:2020-12-17 02:23:59 所属栏目:百科 来源:网络整理
导读:我有两个型号,房间和学生. 房间有很多学生. 学生belongs_to房间. 我收到错误当我在创建新房间时尝试将学生添加到房间时,房间不能为空. 我的猜测是,在提交后,在保存父对象(房间)之前保存子对象(学生).有没有办法绕过订单而不删除room_id上的NOT NULL设置?或
我有两个型号,房间和学生.
房间有很多学生.
学生belongs_to房间.

我收到错误当我在创建新房间时尝试将学生添加到房间时,房间不能为空.

我的猜测是,在提交后,在保存父对象(房间)之前保存子对象(学生).有没有办法绕过订单而不删除room_id上的NOT NULL设置?或者我的猜测是错的?或者更糟糕的是,我做错了?

# app/models/room.rb
class Room < ActiveRecord::Base
  validates :name,presence: true
  has_many :students

  accepts_nested_attributes_for :students
end



# app/models/student.rb
class Student < ActiveRecord::Base
  validates :name,presence: true

  belongs_to :room
  validates :room,presence: true # room_id is set to NOT NULL in database too.

end



# app/admin/room.rb
  form do |f|
    f.semantic_errors *f.object.errors.keys
    f.inputs "Room Details" do
      f.input :name

      f.has_many :students do |student|
        student.input :name
      end
    end

    f.actions
  end

  permit_params :name,students_attributes: [:name]

解决方法

需要让Rails知道belongs_to和has_many如何相互关联.你正在填写has_many并测试belongs_to所以你必须“解释”到rails这些关联是彼此的反转:)

所以在你的情况下,这应该做的伎俩:

class Room < ActiveRecord::Base
  has_many :students,:inverse_of => :room
  accepts_nested_attributes_for :students
end

class Student < ActiveRecord::Base
  belongs_to :room,:inverse_of => :students
  validates_presence_of :room
end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读