0

特定のイベントが発生した場合に終了する必要があるコード(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_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のバックグラウンドから来て、私はレールに死がないことを忘れました。それで、ダイの代替品はありますか?中絶ではありません。恥ずかしそうに終了する必要があります。または、条件文を使用した場合のベストショットです。ただし、ページが条件文でいっぱいになるため、見栄えが悪くなります。どうですか?

4

2 に答える 2

1

To cut off the current action and render the view, you can use return. This will crash with errors if you try to use an unitialized instance variable in the view though.

You can also use render nothing: true which stops the current action and renders nothing.

Perhaps consider redirecting back as well:

flash[:error] = 'There was no order!'
redirect_to :back
于 2013-03-01T19:30:02.313 に答える
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 %>

あなたが何を達成したいのかを示すのに十分明確ではありませんでしたが、それは私があなたの例から得た基本的な考えにすぎません。したがって、全体的なアイデアは、変数を使用する前に変数をチェックすることです。

私が言及したいもう1つのポイントは、使用を避けunless - elseunless単独で使用する必要があります。ロジックをelseブロックする必要がある場合は、を使用しないでくださいif - else。それはおそらくよりも理にかなっていunless - elseます。

于 2013-03-04T07:53:25.270 に答える