保持模型验证与has_many关联一起使用

时间:2015-03-27 13:18:59

标签: ruby-on-rails validation ruby-on-rails-4 model-view-controller

所以我的这个模型名为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.comments.create(title: params[:title])

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

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

2 个答案:

答案 0 :(得分:0)

create方法不会引发错误,而是在失败时返回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返回帖子本身的错误。 IIRC,它会说comments is invalid之类的东西。但要真正得到错误,您必须致电@comment.errors

答案 1 :(得分:0)

你可以改用这样的东西:

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

如果评论验证失败,则返回false