Ruby on rails 上的验证具有多个关系Rails3
我有一个问题模型:Ruby on rails 上的验证具有多个关系Rails3,ruby-on-rails,ruby-on-rails-3,validation,Ruby On Rails,Ruby On Rails 3,Validation,我有一个问题模型: class Question < ActiveRecord::Base has_many :answers, :dependent => :destroy 而不是 http://0.0.0.0:3000/questions/question-name 在控制器中检测到错误时,将其消息存储在flash[:error]中。然后,在视图中,检查闪存中是否存在:error。如果存在,则将其显示为错误消息。如果在显示问题表单的视图代码中没有显示错误,请尝试此操作
class Question < ActiveRecord::Base
has_many :answers, :dependent => :destroy
而不是
http://0.0.0.0:3000/questions/question-name
在控制器中检测到错误时,将其消息存储在
flash[:error]
中。然后,在视图中,检查闪存中是否存在:error
。如果存在,则将其显示为错误消息。如果在显示问题表单的视图代码中没有显示错误,请尝试此操作(注意将Answer.new更改为@Answer,这样将显示控制器中验证失败的相同模型)
禁止保存此用户:
您是在发布答案后重定向,还是只是呈现同一页面?如果要呈现相同的页面,则无论在视图中使用何种方法来显示错误,都应该显示错误。共享您的视图代码?当我使用render时,它会为我提供给定问题的答案url。flash消息的样式为绿色。为了保持一致性,我希望以与其他模型相同的方式显示所有错误。我已经试过了,不过还是要谢谢你:)款式由你决定。您可以使用与表单相同的错误显示。看看它是如何在脚手架上设置的。嗨,马里奥,如果我改变这个,那么我在其他模型上的所有其他flash消息都将显示为验证错误,我不希望这样。谢谢:)嗨,吉米!我得到nil:NilClass的未定义方法'errors',因为@answer是nil。我没有包含任何显示错误的内容,因为它包含在我的布局中。如果我只是添加表单,那么表单所做的事情与它让我感谢的事情完全相同。您需要将@answer=answer.new
添加到显示问题的控制器方法中,另请参见更新以了解错误显示修复我已添加@answer=answer.new abut当我尝试添加新答案时,它将使我达到0.0.0.0:3000/问题/问题名称/答案:(该url有什么问题?您是否设置了将答案资源嵌套在问题下的路由?我指出的是我更改的第二行。您可以轻松地从AnsersController上的index
重定向到QuestionsController上的show
方法。)
<%= 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
<%= 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 %>