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

时间:2012-11-28 22:15:28

标签: ruby datamapper

只有当用户选择此页面时,才需要将页面附加到布局。

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

如果选择了某些布局,效果会很好。

但是,如果用户选择<option value='0'> None选项, DataMapper抛出一个错误,指出layout_id应该大于零。

我认为不应该发生,因为我在required: false 关联设置belongs_to :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

1 个答案:

答案 0 :(得分:1)

你对“引擎盖下”的验证是正确的。

它由belong_to关联自动添加。

你可以通过重新定义layout_id属性来摆脱它。

Page模型中,只需添加:

property :layout_id, Integer, index: true

这将保留关联,但会重新定义layout_id属性
所以它不会自动添加验证。

但请注意,这仅适用于Page.auto_migrate!

之后

或者您可以手动从页面表中删除外键。

另外,请确保layout_id是索引,否则会出现性能问题。