2013-03-01 70 views
0

我有一個代碼,我將需要退出(模具的PHP版本),如果某些事件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_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_item內部的訂單上執行操作時會傳遞一個NIL對象。

此外,在show.html.erb中 - 如果訂單不存在,則不應該存在@order_items和@order_items_error。我只想渲染函數直到order_error,然後停下來。

現在,來自PHP背景,我忘了鐵軌沒有死。那麼是否有死亡的替代?不是中止。我需要它可恥地退出。或者,如果,除非是等等,否則我是使用條件語言的最佳選擇......但是當頁面變滿時,它會顯得很難看。你會怎麼看?

+0

你不想渲染頁面嗎? – 2013-03-01 14:33:04

+0

你還沒有很清楚你實際想要發生什麼。 – 2013-03-01 14:53:44

+1

我相當有信心*你不希望你的Rails服務器因爲丟失一塊數據而退出。 – MrTheWalrus 2013-03-01 18:37:13

回答

0

我不知道正是你想做的事。但是這應該符合你所要求的。

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 %> 

這僅僅是一個基本的想法是什麼,我從你的榜樣得到的,雖然它不夠清晰,顯示你想要什麼實現。所以,整個想法是在使用它之前檢查變量!

還有一點我想提一提,避免使用unless - elseunless應單獨使用,如果你需要把一些邏輯else塊,爲什麼不使用if - else。這可能比unless - else更有意義。

+0

那麼,我正在思考沿着同樣的路線......將改變除非其他的if-else代碼塊。 – 2013-03-04 08:24:53

+0

對不起,我沒有得到你! – 2013-03-04 08:25:42

1

要中斷當前操作並呈現視圖,可以使用return。如果您嘗試在視圖中使用單位化的實例變量,它會崩潰並出錯。

您也可以使用render nothing: true,它停止當前操作並不會呈現任何內容。

也許考慮重定向回以及:

flash[:error] = 'There was no order!' 
redirect_to :back