Ruby on rails 在一对一关系中,是否可以在删除其他子项之前检查验证?

Ruby on rails 在一对一关系中,是否可以在删除其他子项之前检查验证?,ruby-on-rails,destroy,has-one,Ruby On Rails,Destroy,Has One,我只是想弄清我已经研究了几天的问题的真相。我有一个has_one/belish_to关系,路由是嵌套的。通常,如果有一个has\u many/belien\u关系,我可以运行如下操作: def new @movie = Movie.find(params[:movie_id]) @review = @movie.reviews.new(review_params) end 在具有嵌套资源的控制器中 但是,我注意到这不适用于has_one关联,因为我没有@movie对象上名为review

我只是想弄清我已经研究了几天的问题的真相。我有一个has_one/belish_to关系,路由是嵌套的。通常,如果有一个has\u many/belien\u关系,我可以运行如下操作:

def new
  @movie = Movie.find(params[:movie_id])
  @review = @movie.reviews.new(review_params)
end
在具有嵌套资源的控制器中

但是,我注意到这不适用于
has_one
关联,因为我没有@movie对象上名为
review
的方法。换句话说,我无法通过使用以下各项以相同的方式复制控制器功能:

def new
  @movie = Movie.find(params[:movie_id])
  @review = @movie.review.new(review_params)
end

我在这个页面上看到了一些替代方法,比如使用
@movie.build\u review
@movie.create\u review
,但是我遇到了一些问题,因为它会在调用关联对象时立即删除,而不检查验证。好奇是否有人对可能的解决方案有任何建议。我花了相当长的时间寻找解决方案,我尝试过的许多事情还没有产生任何实质性的结果。谢谢你的建议

创建新的审阅应该在
create
方法中进行,而不是在
new
中。 您可以通过两个步骤完成此操作,以便:

def create  @movie = Movie.find(params[:movie_id])
  @review = Review.new(review_params)
  @review.movie = @movie
  if @review.save
    redirect_to movie_path(@movie) # or somewhere else
  else
    render :new
  end
end

为什么不检查一下评论是否为零?如果为零,则使用
.build/create\u review(review\u params)
,如果不是零,则使用
.review.attributes=review\u params
。我不确定您要检查哪些验证,您没有在显示的代码中保存对象。