如何使用has_many关系处理验证

时间:2009-10-12 15:23:36

标签: ruby-on-rails

class Article < ActiveRecord::Base
  has_many :comments
end

class Comment < ActiveRecord::Base
   belongs_to :article
   validates_presence_of :body
   validates_presence_of :author_name
end

如果我将author_name留空,那么我将收到正确的验证错误。一切都好。

>> Article.first.comments.create(:body => 'dummy body').errors.full_messages
=> ["Please enter your name"]

看看这个例子。

>> a = Article.first
>> a.comments.create(:body => 'dummy body')
>> a.errors.full_messages
["Comments is invalid"]

我发送文章的实例(在本例中为a)来查看图层。我想知道如何获得访问权限 从实例对象a。请输入您的名字'。

3 个答案:

答案 0 :(得分:4)

您可以将新创建​​的评论分配给它自己的变量,并将其发送到视图中。

@article = Article.first  
@comment = @article.comments.create(:body => 'dummy body')

然后,您可以使用error_messages_for 'article', 'comment'显示两个对象的错误。我不知道是否有办法自动显示单个子错误,而不是“X无效”......

答案 1 :(得分:1)

只是补充Daniel的答案,如果您想自定义'Comments is invalid'错误消息,我找到了通过i18n实现此目的的方法:

# config/locales/en.yml
en:
  activerecord:
    attributes:
      article:
        comments: Comment

这样你就会得到语法正确的'Comment is invalid' :) 您还可以更改'is invalid'部分:

# config/locales/en.yml
en:
  activerecord:
    errors:
      models:
        article:
          attributes:
            comments:
              invalid: are invalid

这样你就会获得'Comments are invalid'

答案 2 :(得分:0)

假设视图是尝试创建对象的表单,您应该能够完全按照上面的操作执行:

@article.errors.full_messages

只能访问该对象的其他视图(例如索引或显示视图)不会有任何错误,因为该数组仅在尝试创建或更新文章时填充。