Ruby 由于引擎盖下验证,DataMapper不会保存条目

Ruby 由于引擎盖下验证,DataMapper不会保存条目,ruby,datamapper,Ruby,Datamapper,我需要网页被附加到布局只有当用户选择这个 我的意思是,当用户编辑页面时,有一个下拉列表可供选择布局 如果选择了某些布局,则效果良好 但是,如果用户选择None选项, DataMapper抛出一个错误,指出layout\u id应该大于零 我认为这种不应该发生,因为我在上设置了必需:false属于:layout关联 以下是我的模型: class Layout include DataMapper::Resource property :id, Serial property :na

我需要网页被附加到布局只有当用户选择这个

我的意思是,当用户编辑页面时,有一个下拉列表可供选择布局

如果选择了某些布局,则效果良好

但是,如果用户选择
None
选项, DataMapper抛出一个错误,指出
layout\u id
应该大于零

我认为这种不应该发生,因为我在
上设置了
必需:false
属于:layout
关联

以下是我的模型:

class Layout

  include DataMapper::Resource

  property :id, Serial
  property :name, String

end

class Page

  include DataMapper::Resource

  property :id, Serial
  property :name, String

  belongs_to :layout, required: false

end
关于“引擎盖下”验证,你说得对

它由
归属
关联自动添加

您可以通过重新定义
layout\u id
属性来摆脱它

页面
模型中,只需添加:

property :layout_id, Integer, index: true
这将保持关联,但将重新定义
layout\u id
属性
所以它不会自动添加验证

但是请注意,只有在
Page.auto\u迁移之后,此操作才会起作用

或者,您可以手动从pages表中删除外键

另外,请确保
layout\u id
是一个索引,否则会出现性能问题。

关于“引擎盖下”验证,您是正确的

它由
归属
关联自动添加

您可以通过重新定义
layout\u id
属性来摆脱它

页面
模型中,只需添加:

property :layout_id, Integer, index: true
这将保持关联,但将重新定义
layout\u id
属性
所以它不会自动添加验证

但是请注意,只有在
Page.auto\u迁移之后,此操作才会起作用

或者,您可以手动从pages表中删除外键


另外,请确保
layout\u id
是一个索引,否则会出现性能问题。

提交表单时,控制器是什么样子的?不确定您的意思。控制器与模型有什么关系?哦,你是说接收数据并将其发送到DataMapper的操作?这是一个简单的方法,比如:
row=DataMapper.first\u或\u create(id:id).update!(params)
提交表单时,控制器是什么样子的?不确定您的意思。控制器与模型有什么关系?哦,你是说接收数据并将其发送到DataMapper的操作?这是一个简单的方法,比如:
row=DataMapper.first\u或\u create(id:id).update!(params)
btw,我的工作演示在哪里?我看到你的大多数答案都附有一个现场演示:)顺便说一句,我的工作演示在哪里?我看到你的大部分答案都附有一个现场演示:)