1

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

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

如果选择了一些布局,它会很好地工作。

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

我认为这不应该发生,因为我建立required: falsebelongs_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
4

1 回答 1

1

您对“幕后”验证是正确的。

它是由belong_to关联自动添加的。

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

Page模型中只需添加:

property :layout_id, Integer, index: true

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

但是请注意,这只有在Page.auto_migrate!

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

另外,确保layout_id是一个索引,否则你会遇到性能问题。

于 2012-11-28T23:05:41.850 回答