2012-11-28 70 views
1

僅當用戶選擇此選項時,我需要將頁面附加到佈局。DataMapper不會因保密驗證而保存條目

我的意思是當用戶編輯頁面時,有一個下拉框選擇佈局。

如果選擇了一些佈局,它會很好地工作。

但是,如果用戶選擇<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 
+0

當您提交該表單時,控制器的外觀如何? –

+0

不確定你的意思。控制器與模型有什麼關係? –

+0

哦,你是指接收數據並將其發送到DataMapper的操作?這是一個簡單的方法,如:'row = DataMapper.first_or_create(id:id).update!(params)' –

回答

1

你說得對,「在引擎罩」驗證。

它是由belong_to協會自動添加的。

你可以通過重新定義layout_id屬性來擺脫它。

Page模型簡單地添加:

property :layout_id, Integer, index: true 

這將使聯想,但將重新定義layout_id財產上
所以不會有自動添加驗證。

但是請注意,這將工作後,才Page.auto_migrate!

或者你也可以手動刪除從您的網頁表的外鍵。

此外,請確保layout_id是一個索引,否則您會遇到性能問題。

+0

是的,這工作,謝謝! –

+0

btw,我的演示在哪裏?我看到你的大部分答案都附帶了一個現場演示:) –