2012-03-02 85 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