0

その場で計算する属性が継続的に変化する @products のコレクションをロードしています。最初のページ インデックスですべての @products に対してすべての計算を実行したくありません。代わりに、画像の上にカーソルを置いたときに計算を実行して表示したいだけです。

まず、次のように、products/index.html.erb 内の各製品の計算を含むポップアップ ボックスを表示する jQuery 呼び出しを作成します。

products/index.html.erb

<script type="text/javascript">
  jQuery(function($){
    <% @products.each do |product| %>
      $('#calc_<%= product.id %>').hover(function() {
        $('#pid_<%= product.id %>').show() 
      }, function() {
        $('#pid_<%= product.id %>').hide()
      });
   <% end %>
});
</script>

<table class='list'>
  <%= render :partial => "products/product", :collection => @products %>
</table>

私の _product.html.erb:

<%= image_tag('/images/info.png', :id => "calc_#{product.id}") %>
<div class='pid_display' id='pid_<%=product.id %>'></div>    

私のCSS:

.pid_display {
    height: 80px; 
    width: 200px; 
    background-color: #eee; 
    display: none; 
    padding-top: 8px;
    position: absolute;
}

次のように product.id で計算を実行するページを呼び出そうとしています (ただし、これが適切かどうかはわかりません)。

 jQuery.ajax("products/calculations/<%= product.id %>");

計算ページへの呼び出しを組み合わせてポップアップ ボックスに結果を表示しようとすると、両方が起動します。つまり、ポップアップ ボックスが表示され、ログには、products_controller から計算が実行されたことが示されます。

これら 2 つの呼び出しを組み合わせて、ポップアップ ボックス内に計算結果を表示するにはどうすればよいですか?

4

2 に答える 2

0

http://tech.thereq.com/post/16479390885/loading-page-content-via-ajax-in-rails-3-1を教えてくれた友人のマーカスに感謝します。「ロード」メソッドの使用:

jQuery(function($){
  <% @products.each do |product| %>
    $('#calc_<%= product.id %>').hover(function() {
      $('#pid_<%= product.id %>').show().load('products/calculations/<%= product.id %>');
    }, function() {
      $('#pid_<%= product.id %>').hide()
    });
  <% end %>
});
于 2013-02-25T16:07:52.800 に答える
0

attr_accessibleを使用して、モデルが @product の最初の要素に対して持つ属性を特定し、それを配列に保存できます。

次に、これらの属性を使用して、product.method("attribute") を使用してオブジェクトから値を取得できます。

于 2013-02-23T09:21:15.410 に答える