Ruby on rails 如果条件满足,是否优雅地退出轨道?
我有一个代码,如果发生某些事件,我需要退出(php版本的die) trace_controller.rb中的代码段Ruby on rails 如果条件满足,是否优雅地退出轨道?,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我有一个代码,如果发生某些事件,我需要退出(php版本的die) trace_controller.rb中的代码段 def show rule=Rule.new @order,@order_error=rule.get_order(@order_external_id) @order_items, @order_items_error=rule.get_order_items(@order) @order_item_units, @order_item_units_er
def show
rule=Rule.new
@order,@order_error=rule.get_order(@order_external_id)
@order_items, @order_items_error=rule.get_order_items(@order)
@order_item_units, @order_item_units_error=rule.get_order_item_units(@order_items)
@outbound_messages, @outbound_messages_error = rule.check_outbound_messages(@order_external_id)
@inbound_messages, @inbound_messages_error = rule.check_inbound_messages(@outbound_message)
......
在show.html.erb中
<% unless @order_error.blank? %>
<%= @order_error.html_safe %>
<% else %>
<%= render "trace/display_tabular_data", :data => @order %>
<% end %>
.....
.....
<% unless @order_items_error.blank? %>
<%= @order_items_error.html_safe %>
<% else %>
<% @order_items.each do |order_item| %>
<h5>Order Item</h5>
<%= render "trace/display_tabular_data", :data => order_item %>
<% end %>
<% end %>
......
@订单%>
.....
.....
订单项目
订单\项目%>
......
我的大部分职能都取决于以前职能的结果。现在使用依赖于订单的get_order_items函数。如果订单不存在,则无需计算get_order函数,因为它也不存在。此外,它还引发了一个错误,因为它说当我对get_order_项中的订单执行操作时,我正在向它传递一个NIL对象
此外,在show.html.erb中-@order\u items和@order\u items\u错误即使在订单不存在的情况下也不应该存在。我只想渲染函数直到出现顺序错误,然后停止
现在,来自PHP背景,我忘记了rails没有死。那么,是否有一种替代品?流产,不是吗。我需要它让我丢脸地离开。或者是我最好的使用条件句if,除非等…但它看起来很难看,因为页面将充满它们。您对此有何看法?要切断当前操作并呈现视图,您可以使用
返回
。但是,如果尝试在视图中使用统一化的实例变量,则会出现错误
您还可以使用render nothing:true
停止当前操作并不渲染任何内容
也可以考虑重定向:
flash[:error] = 'There was no order!'
redirect_to :back
我不知道你到底想做什么。但这应该符合你的要求
def show
rule=Rule.new
@order,@order_error=rule.get_order(@order_external_id)
unless @order.blank?
@order_items, @order_items_error=rule.get_order_items(@order)
@order_item_units, @order_item_units_error=rule.get_order_item_units(@order_items) unless @order_items.blank?
end
@outbound_messages, @outbound_messages_error = rule.check_outbound_messages(@order_external_id)
@inbound_messages, @inbound_messages_error = rule.check_inbound_messages(@outbound_message) unless @outbound_messages.blank?
end
同样,可以在视图文件中添加条件:
<% unless @order.blank? %>
<% unless @order_error.blank? %>
<%= @order_error.html_safe %>
<% else %>
<%= render "trace/display_tabular_data", :data => @order %>
<% end %>
.....
.....
<% unless @order_items.blank? %>
<% unless @order_items_error.blank? %>
<%= @order_items_error.html_safe %>
<% else %>
<% @order_items.each do |order_item| %>
<h5>Order Item</h5>
<%= render "trace/display_tabular_data", :data => order_item %>
<% end %>
<% end %>
<% end %>
.......
.......
<% end %>
@订单%>
.....
.....
订单项目
订单\项目%>
.......
.......
这只是我从你的例子中得到的一个基本想法,尽管还不足以清楚地表明你想要实现什么。所以,整个想法是在使用变量之前检查它
我想再提一点,避免使用
除非-else
,除非应该单独使用,如果需要在else
块中放入一些逻辑,为什么不使用如果-else
。这可能比更有意义,除非-else
你不想呈现页面吗?你还没有很清楚你到底想发生什么。我很有信心,你不想因为丢失了一段数据就退出Rails服务器。@Thewalus先生-现在问题更清楚了吗?@MikeCampbell-更好了?嗯,我在想同样的事情……将把除非else改为if else代码块。