0

erb の has many の関係を介してレコードが存在するかどうかを Rails に問い合わせています。

<% if @hack.serials %>

最終的に、「シリアル」が「@hack」内に存在しない場合、jquery を使用して「display: none」を div のクラスに追加したいと考えています。

このようにerbを介してレールとjqueryの間で通信するためのパターンはありますか?

編集

ここでの考え方は、データがない場合、タブとそのコンテンツを表示したくないということです。また、「ハック」が編集されてページがリロードされるまで、div「チャートテーブル」にはデータがないため、表示する必要はありません。

<div class = "chart-table" 
  <% if @hack.serials %>
    <%= raw 'style="display:block"' %>
  <% end %>>
<!-- TABS -->
<div id="tabs">
  <ul>
    <li><a href="#tabs-1">Chart</a></li>
    <li><a href="#tabs-2">Last 5 Table</a></li>
  </ul>
<!-- CHART -->
<div id="tabs-1">
  <div id="container" style="height: 500px; min-width: 500px"></div>
</div>
<!-- TABLE -->
<div id="tabs-2">
  <table class = "table-condensed">
    <%= @hack.id %>
    <% @hack.serials.each do |s| %>  
    <tr>
       <th>Series Title</th>
        <th>Series Name</th>
        <th>Series Id</th>
      <% s.observations.sort{|a,b| a.id <=> b.id}.last(5).each do |o| %>
        <th><%= o.date %></th>
      <% end %>
    </tr>    
    <tr>
      <td><%= link_to s.title, [@hack, s] %></td>
      <td><%= s.series_name %></td>
      <td><%= s.id %></td>
    <% s.observations.sort{|a,b| a.id <=> b.id}.last(5).each do |o| %>
      <% if s.units_short == 'Mil. of $' %>
        <td><%= number_to_currency(convertMtoBHack(o.value), :precision => 0) %></td>
        <% else %>
          <td><%= number_to_currency(o.value, :precision => 0) %></td>
        <% end %>
      <% end %>
    </tr>
    <tr>
      <td><%= s.frequency_short %></td>
      <td><%= s.units_short %></td>
    </tr>
    <% end %>
  </table>
</div>

4

4 に答える 4

2

jQueryを介してこれを行う必要があると感じる理由がわかりません。

div の style 属性を直接記述しないのはなぜですか?

<div <%= @hack.serials ? 'style="display:none"' : '' %>>
于 2013-03-18T21:04:46.760 に答える
1

何かのようなもの:

<script>
    <% unless @hack.serials.map(&:name).include? "My Serial" %>
        $('#my_serial_id').css('display', 'none');
    <% end %>
</script>

「MySerial」という名前のシリアルを探していても見つからない場合は、対応するdivの表示を停止してください。

Railsコードはサーバー側で実行され、JavaScriptを実行するクライアントにレンダリングされます。したがって、Railsからjavascriptに必要なものを渡すことができます。

JavaScriptをRailsに渡すには、他のトリックや魔法のようなもの(たとえば、ajaxなど)が必要になります。

于 2013-03-18T21:02:55.580 に答える
0

Rails Hotline の親切な人たちが答えを教えてくれました。

<% if @hack.serials.present? %>
  <div class = "chart-table">
    <!-- TABS -->
    <div id="tabs">
      <ul>
        <li><a href="#tabs-1">Chart</a></li>
        <li><a href="#tabs-2">Last 5 Table</a></li>
      </ul>
    </div>
  </div>
<% end %>

「空」の場合、@hack.serials は空の配列を返しますが、true を返します。@hack.serials.present を使用していますか? 私が探していた動作である空の配列の場合は false を返します。

于 2013-03-20T03:19:51.643 に答える
0

この div は、いくつかの ajax クラスの後 (DOM のリロード前) に表示されますか? そうでない場合は、それを書くべきかどうか疑問に思います。

Mark Hollands の回答には注意が必要です。これは機能しますが、その要素に将来 UI の変更があった場合に問題が発生する可能性があるためです。要素を記述する必要がある場合は、単純な条件付きに固執し、「静的」コードをパーシャルに配置します。

<% if @hack.serials %>
  <div>
    <%= render 'something' %>
  </div>
<% else %>
  <div style='display:none'>
    <%= render 'something' %>
  </div>
<% end %>
于 2013-03-19T01:12:22.230 に答える