ruby-on-rails - 你怎么能强制验证嵌套模型的所有字段,即使它们没有改变? ( rails 3.1)

标签 ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1

当您使用包含嵌套模型属性的表单编辑模型时,似乎仅当子对象上的至少一个字段已更改时才验证子对象。

但是,假设您的验证规则已更改,以至于正在编辑的一个或多个嵌套模型不再被视为有效。您如何强制 Rails 重新验证所有嵌套模型的所有字段?

更新

这是一个有效的技巧。我希望有人知道更优雅的方法。

# parent.rb

has_many :children

# Manually force validation of all the children.
# This is lame because if you have multiple child associations, you'll have to 
# keep updating this method.
def reset_validation
   self.children.each{|child| child.valid? }
   self.valid?
end

# parent_controller.rb
def update
  @parent.reset_validation

  if @parent.update_attributes(params[:parent])
    redirect_to(root_path, :notice => 'Parent successfully updated.')
  else
   render :action => "edit"
  end
end

最佳答案

事实证明,这个问题的答案相当简单。在父模型上,您只需显式声明您希望验证关联的子模型。

# parent.rb
validates_associated :children

关于ruby-on-rails - 你怎么能强制验证嵌套模型的所有字段,即使它们没有改变? ( rails 3.1),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7503009/

相关文章:

ruby-on-rails - Ruby on Rails 无法使用 CoffeeScript 和 AJAX 发送获取请求

ruby-on-rails - 未定义的方法错误单击简单的 webscraper

html - rails 页脚不粘在页面底部

ruby-on-rails - 附加到事件记录关系对象

ruby-on-rails - respond_to 导致 [ :json, :html]:Array 的未定义方法 `to_sym'

sqlite - Heroku 正在尝试安装 sqlite3 gem,即使它不在 Gemfile 中

MySQL 服务器已消失 : Rails on Passenger (Redmine)

ruby-on-rails - Redmine Hook 的验证问题

ruby-on-rails-3 - 为什么这个 mongoid Rails 3 项目中没有 rake 任务?

javascript - 升级到 Rails 3.1,现在我的高亮效果不起作用