保持模型验证与 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!
以引发错误。与 update
和 update!
.
相同
编辑:
要获得 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
所以我将此模型命名为 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!
以引发错误。与 update
和 update!
.
编辑:
要获得 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