2012-03-02 87 views
1

我目前正在使用嵌套窗體/ fields_for,我想知道是否有一種簡單的方法來跳過嵌套屬性的驗證?跳過對Rails 3中嵌套屬性的驗證?

我可以在某處擠一個object.nested_object.save(:validate => false)嗎?

回答

4

你只需要做你的保存在兩部分。第一節省約父節約和第二部分關於嵌套

如果您在本場嵌套使用accepts_nested_attributes_for

def create 
    nested_params = params[:object].delete(:nested_attributes) 
    if object = Object.create(params[:object]) && 
    object.update_attributes(nested_params, :validate => false) 
    redirect_to object_url(object) 
    else 
    render :new 
    end 
end 

與評論更新從Cojones:

如果你不使用這個選項你需要直接指定nested_attribute之類的解釋評論:

def create 
    nested_params = params[:object].delete(:nested_attributes) 
    if object = Object.create(params[:object]) && 
    object.nested_object.update_attributes(nested_params, :validate => false) 
    redirect_to object_url(object) 
    else 
    render :new 
    end 
end 

請參閱評論以獲取更多信息。

+0

這正是我所需要的。非常感謝! – Cojones 2012-03-02 08:50:17

+0

我試圖將它付諸實踐,但失敗了:未定義的方法'{「user_id」=> ...您確定要調用'update_attribute'嗎?因爲該方法根據API期望屬性的名稱作爲第一個參數。 – Cojones 2012-03-05 09:05:22

+0

是的,這是一個錯誤的問題,它是'update_attributes'我修復它在我的回答 – shingara 2012-03-05 09:16:24