form_for关联模型的验证消息

时间:2014-09-16 11:02:59

标签: ruby-on-rails form-for

我有一个有评论的提供者模型。我已经设置了评论的验证,以检查评论存在的正文是否存在。

这是我模特中的最新消息

  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 %>

获取相关评论模型错误的最佳方法是什么?我尝试了一些替代方案,但没有运气。如果有人能指出我正确的方向,我将非常感激。

2 个答案:

答案 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