3

erbテンプレート内にdivがあり、クリックするとコントローラーの表示アクションをトリガーします。

<div class = "box"> 
  Content within the box
</div>

<script>
  $(document).ready(function() {
    $('.box').click(function(){
      $.get(<%=hack_path(h) %>)
    });
  });
</script>

「引数の数が間違っています(1の場合は0)」というエラーが表示されます。希望する結果を達成するために正しい軌道/パターンを使用しているかどうか、または他の手法を使用する必要があるかどうか疑問に思っていますか?

実際のテンプレートは次のとおりです。

<h1>Hacks</h1>

<% @hack.each do |h| %> 
  <div class = "box">
    <table>
    <h3><%= h.hack_name %></b></h3>
    <%= h.id %>
    <span id = "showhack"> <%= link_to 'Show', hack_path(h) %></span>
    <%= link_to 'Edit', edit_hack_path(h) %>
    <%= link_to 'Destroy', hack_path(h), method: :delete, data: { confirm: 'Are you sure?' } %>
    <%= link_to "Get Data", :controller => :admins, :action => :checkSerials, :method => :get %>

  <% h.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, [h, 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>
 <script>
 $(document).ready(function() {

   $('.box').click(function(){
   $.get(<%= hack_path(@hack).to_json %>)
   });
  });
 </script>

<div><%= link_to 'New Hack', new_hack_path %></div>
4

1 に答える 1

1

文字列をエスケープする必要があります。$.get(/what/ever/path)それ以外の場合は、もちろんどちらが間違っているかとしてレンダリングされます。

私は使用することをお勧めしますto_json()、それは他の厄介なものからもあなたを守ります:

$.get(<%= hack_path(h).to_json %>) 
# renders to $.get("/what/ever/path")

ただし、通常、同じハンドラーが使用されている場所が複数あり、データタグを使用してマークアップにURLを追加し、を使用してそれらを読み取ることになります$.data()

<div data-url=<%= hack_path(h).to_json %>> 

そしてjavascript部分内:

var url = $(target).data("url");

たとえば、「ハック」のタイトルをクリック可能にしたい場合:

<td class="hacktitle" data-url=<%= hack_url(h).to_json %>><%= link_to s.title, [h, s] %></td>

/* somewhere else in javascript */

$("table.hacks").on("click", "td.hacktitle", function(event) {
    var targetTd = $(event.target);
    var url = targetTd.data("url");
    $.get(url);

これはすべて、HAMLを使用するときにさらに便利です(とにかくお勧めします)

%div{:data => {:url => hack_path()}}
  some content
于 2013-03-07T15:01:03.700 に答える