我有一个有评论的提供者模型。我已经设置了评论的验证,以检查评论存在的正文是否存在。
这是我模特中的最新消息
validates :body, presence: true
这是我遇到问题的表格。我得到了未定义的方法错误。
<%= form_for([@provider, Comment.new] ) do |f| %>
<% if @provider.comments.errors.any? %>
<h2>Errors<h2>
<ul>
<% @provider.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
<% end %>
<%= f.text_area :body, cols: 30, rows: 4, class: 'form-control' %>
<%= f.hidden_field :user_id, value: current_user.id, class: "form-control" %>
<div>
</br>
<%= f.submit :post, class: 'btn btn-primary btn-lg' %>
</div>
<% end %>
获取相关评论模型错误的最佳方法是什么?我尝试了一些替代方案,但没有运气。如果有人能指出我正确的方向,我将非常感激。
答案 0 :(得分:0)
errors方法,如:
@comment.errors.any?
我会解决这个问题:
我会在控制器的动作@comment = Comment.new
中设置评论。
然后在form_for
<%= form_for([@provider, @comment] ) do |f| %>
然后,如果我说得对,你只需检查评论错误:
<% if @comment.errors.any? %>
<h2>Errors<h2>
<ul>
<% @comment.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
<% end %>
尝试一下,我希望它可以按你喜欢的方式工作
答案 1 :(得分:0)
为确保您的Provider
模型Provider
验证其评论you should use the validates_associated
method:
class Provider < ActiveRecord::Base
has_many :comments
validates_associated :comments
end
很遗憾,您无法通过这种方式轻松获取评论中的特定错误。它们将显示在@provider.errors[:comments]
中,但仅显示“评论无效”的说明。但是,您could use a custom validator that "bubbles up" errors from associated models。
在这种情况下 - 你正在创建一个新模型,而其他模型没有被编辑 - 在控制器中创建一个新的Comment
并将其传递到视图中以便在形成。这样您就可以直接访问@comment.errors
。