Ruby on rails Rails在保存错误和重新呈现页面上,显示未保存的属性&;错误
经典的Rails设置是这样的Ruby on rails Rails在保存错误和重新呈现页面上,显示未保存的属性&;错误,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,经典的Rails设置是这样的 def manage @o = Object.new end def create @o = Object.new(params) if @o.save redirect_to "something" else render "manage" end end # view for manage <div id="errors"> <% if @o.errors.any? %> <ul
def manage
@o = Object.new
end
def create
@o = Object.new(params)
if @o.save
redirect_to "something"
else
render "manage"
end
end
# view for manage
<div id="errors">
<% if @o.errors.any? %>
<ul>
<% @o.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
<% end %>
</div>
<input name="attribute" value="<%= @o.attribute %>">
def管理
@o=Object.new
结束
def创建
@o=对象。新建(参数)
如果@o.save
将_重定向到“某物”
其他的
呈现“管理”
结束
结束
#管理视图
关键的好处是,如果属性抛出错误,重新呈现的页面将显示:
- 对象的错误
- 未在输入字段中保存为默认值的对象属性,因此用户无需重新键入内容
<% if @o.attribute == 2 %>
<div id="show-this"></div>
<% end %>
如果用户试图设置@o.attribute=2
,但由于验证错误而失败,我希望页面显示错误消息,但同时显示错误消息,因为@o.attribute!=2
实际上,我不想显示#show this
div。显然,我可以通过对整个对象执行重定向
或重新加载
来删除#show this
,但这样就不会再显示错误了
我可以想出不同的方法来做到这一点,即:
- 在自定义验证中,如果未保存,请将
重置为nil属性
- 将错误移动到闪存,该闪存可与重新加载
的@o
重定向一起使用
但是,我想知道Rails是否已经有了这样做的方法。。。基本上,我可以轻松地重新加载一个属性,或者检查该属性的“保存后”值应该是多少?在代码中,您可以添加
<% if @o.attribute == 2 and @o.errors.empty%>
<div id="show-this"></div>
<% end %>
语义可以关闭,但这是处理它的简单方法。在代码中,您可以添加
<% if @o.attribute == 2 and @o.errors.empty%>
<div id="show-this"></div>
<% end %>
语义可以关闭,但这将是处理它的简单方法。我还没有测试它,但是将
|124;=
添加到管理
并在创建
中调用管理
可能会起作用:
def manage
@o ||= Object.new
end
def create
@o = Object.new(params)
if @o.save
redirect_to "something"
else
manage
end
end
我还没有测试它,但是将
|
添加到manage
并在create
中调用manage
可能会起作用:
def manage
@o ||= Object.new
end
def create
@o = Object.new(params)
if @o.save
redirect_to "something"
else
manage
end
end