我正在尝试在Index视图中创建一个对象表单,一切顺利,但是当保存失败(验证错误)时,错误将不会显示在屏幕上。
这是我的链接控制器
class LinksController < ApplicationController
respond_to :html
def index
@link = Link.new
@links = Link.all
end
def create
@link = Link.new(params[:link])
flash[:notice] = "Link was found successfully." if @link.save
respond_with(@link)
end
def show
respond_with(@link = Link.find(params[:id]))
end
def statistics
end
end
这是错误出现的部分形式
<h1>New Search</h1>
<%= form_for(@link) do |f| %>
<% if @link.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@link.errors.count, "error") %> prohibited this ticket from being saved:</h2>
<ul>
<% @link.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<p><b><%= f.label(:original, "URL") %></b>
<%= f.text_field :original %></p>
<p><%= f.submit('Find Link') %></p>
<% end %>
当我创建一个新对象并且原始文件有效时,一切顺利,但是当它不是我得到的时候:
缺少模板
缺少模板链接/ new与{:formats =&gt; [:html],:locale =&gt; [:en,:en],:handlers =&gt; [:erb,:builder,:rjs,:rhtml ,:rxml]}在视图路径中
当他得到错误时似乎要求新的,但我希望它去索引,并在那里显示错误。我尝试用下面的代码回复,但它也没有用。
respond_with(@link) do |format|
format.html { render :action => 'index'}
end
同样是我的index.html.erb,它会加载表单部分和最近部分
<%= render 'form' %>
<%= render 'recent' %>
_recent.html.erb
<h1>Recent Finds</h1>
<table>
<tr>
<th>URL</th>
<th>Link</th>
<th>Service</th>
</tr>
<% @links.each do |link| %>
<tr>
<td><%= link.original %></td>
<td><%= link.link %></td>
<td><%= link.site %></td>
</tr>
<% end %>
</table>
关于我可以在这做什么的任何想法?
答案 0 :(得分:0)
<% if f.error_messages.blank? %>
content when there are error messages
<% end %>
这是我在2.3.8中所做的
答案 1 :(得分:0)
无论保存是否成功,您的create
方法都会使用params构造您的对象进行响应。你可能想要这样的东西:
def create
@link = Link.new(params[:link]
if @link.save
respond_with(@link, :notice => "Yay!")
else
redirect_to(links_path, :alert => "Nay!")
end
end
答案 2 :(得分:0)
如果它给你一个像Template is missing
这样的错误,这意味着在执行创建操作时,如果没有保存记录,它会尝试渲染不存在的“新”页面。
我对respond_with没有太多了解,我们如何覆盖其行为失败的行为,但您可以编写如下代码:
def create
@link = Link.new(params[:link])
if @link.save
flash[:notice] = "Link was found successfully."
respond_with(@link)
else
@links = Link.all
render :action => :index
end
end
要显示错误消息,您可以编写以下条件:
<% unless @link.valid? %>
put your content to display error messages here
<% end %>