0

データが利用できない場合に表示される情報を制限しようとしています。

私のview.rbファイルには、次のようなものがあります

<% if @content != nil %>
 <div>
   <h3>....</h3>
    <% @content[0..3].each do |something| %>  
     <li> .... <li>
    <% end %>
    <% @content[4..5].each do |something| %>  
     <li> .... <li>
    <% end %>
    <% @content[5..11].each do |something| %>  
     <li> .... <li>
    <% end %>
 <div>
<% end %>

content が nil の場合でも、content[4..5].each のような行は |some| を行います。が実行され、明らかな理由でエラーがスローされます。

条件が満たされていない場合、html と ruby​​ コードの複数のブロックを無視するにはどうすればよいですか?

4

3 に答える 3

1

コード<% content[4..5].each do |something| %>が実行される場合、@contentは nil ではありません。Rubyがそれについて間違っている可能性はありません。

しかし、空の配列や空の文字列のようなものであれば、テストに合格します。可能な「nil のような」値 (nil、空、空白...) の広い範囲をカバーするには、次を使用します。

<% unless @content.blank? %>

そして、それが役立つかどうか教えてください。

于 2013-05-10T02:49:20.743 に答える
0

あなたが使用することができます:

 <% unless @content.nil? %>
      #true
 <%else%>
      #false
 <%end%>
于 2013-05-10T02:51:06.497 に答える
0

@content が確実に nil であると確信していますか? オブジェクトは nil ではなくても空になる可能性があることに注意してください。

例えば:

@コンテンツ=[]

また

@コンテンツ={}

@content!=nil は実際には非 nil ではないため、ホールドを true にします。以前にインスタンス化されていない場合、参照は nil です。

Modelname,All のようなデータベース クエリを介して @content にデータを格納する場合、null (nil) オブジェクトではなく空の配列が取得されます。

また、ユーザーから @content をリクエスト パラメータとして受け取っている場合、GET リクエストにパラメータの名前が含まれていて値が含まれていない場合、@content は空ですが nil ではありません。

つまり、http: //yourdomain.com/somecontroller/index?name=10& age= には、params[:age] が空の nil として含まれます。

解決:

<% if @content.to_s.empty? != true %>
<div>
<h3>....</h3>
<% content[0..3].each do |something| %>  
 <li> .... <li>
<% end %>
<% content[4..5].each do |something| %>  
 <li> .... <li>
<% end %>
<% content[5..11].each do |something| %>  
 <li> .... <li>
<% end %>
<div>
<% end %>
于 2013-05-10T03:08:34.820 に答える