保持模型验证与 has_many 关联一起工作

Keep model validation working with has_many association

所以我将此模型命名为 Post,并将其命名为 has_many :comments。每条评论都有一个 title 字段。

Comment 模型具有以下结构:

class Comment < ActiveRecord::Base
  belongs_to :post
  validates :title, presence: true
end

这是我的 Post 模型:

class Post < ActiveRecord::Base
  has_many :comments
end

所以在我的 Posts 控制器 中,我为某些 post 添加注释,如下所示:

@post.comments.create(title: params[:title])

但即使 params[:title] 为空,也不会显示错误,即使在模型上有一个 validates 调用。

为什么会这样?如何解决这个问题?

create 方法在失败时不会引发错误,而是 returns nil。当方法失败时,改为调用 create! 以引发错误。与 updateupdate!.

相同

编辑: 要获得 comments 错误,请将您的代码更改为:

@comment = @post.comments.build(title: params[:title])
if @comment.save
  redirect_to comment_path(@comment) #or wherever you want to go
else
  render 'new'
end

@post.errors returns post 本身的错误。 IIRC,它会说类似 comments is invalid 的内容。但要真正获得错误,您必须调用 @comment.errors.

您可以改用这样的东西:

@comment = @post.comments.build(title: params[:title])
@comment.save

如果评论验证失败,它将return false