验证has_many关系Rails3

时间:2011-05-17 17:26:45

标签: ruby-on-rails ruby-on-rails-3 validation

我有一个问题模型:

class Question < ActiveRecord::Base  
  has_many :answers, :dependent => :destroy

这有很多答案:

class Answer < ActiveRecord::Base
   belongs_to :question, :counter_cache => true
   validates :body,
             :presence => true,
             :length => {:minimum => 3, :maximum => 4096}

我在问题页面下有一个表单,所以我可以提交答案。

问题是,在我创建新答案后,我被重定向回问题,所以我看不到任何验证错误。

有谁知道如何从问题页面上的答案中查看验证错误?

这是views / questions / show.html.erb

    <%= render :partial => @answers %>

<%= form_for [@question, Answer.new] do |f| %>

    <div class="formline">
    <div class="formlabelcenter"><%= f.label :body, "New Answer" %></div>
    <div class="formfield"> <%= f.text_area :body, :class => "mceEditor" %></div>
    </div>

    <div class="formline">
    <div class="submit">
    <%= f.submit "Add Answer" %></div>
    </div>
<% end %>

当我试图提出问题时,它让我:

http://0.0.0.0:3000/questions/question-name/answers

而不是

http://0.0.0.0:3000/questions/question-name

2 个答案:

答案 0 :(得分:1)

您没有在显示问题表单的视图代码中显示错误,请尝试此操作(注意将Answer.new更改为@answer,因此这将显示在控制器中验证失败的相同模型)

<%= form_for [@question, @answer || Answer.new] do |f| %>
  <% if @answer && @answer.errors.any? %>
    <div class='errors'>
      <h2>
        <%= pluralize(@answer.errors.count, "error") %> 
        prohibited this user from being saved:
      </h2> 
      <ul>
      <% @answer.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>  
      <% end %>
      </ul>
    </div>
  <% end %>
  <% # your view code here %>
<% end %>

答案 1 :(得分:0)

检测到控制器中的错误时,请将其消息存储在flash[:error]中。然后,在视图中,检查:error哈希中是否存在flash。如果存在,则将其显示为错误消息。