2013-11-21 186 views
1

我有一個表部分內部的行。當我嘗試通過Ajax呈現部分內容時,它會在表格的頂部放置一個新的表格行,而不是重新呈現要更新的表格行。有沒有我不遵循的partials和table行的規則?Rails部分渲染兩次?

的部分:

<div id="edit_the_item_<%= item.id %>"> 
    <%= render 'edit_item_row', item: item, item_number: item_number %> 
</div> 

裏面的部分:

<tr> 
    <td> 
     <%= item.total %> 
    </td> 
</tr> 

Update.js.erb

$("#edit_the_item_<%= @item.id %>").html("<%= escape_javascript(render(:partial => 'reports/edit_item_row', :locals => {:item => @item})).html_safe %>"); 

這裏是整個表的部分是在:

<table cellspacing="0" width="100%"> 
    <% @items.reverse.each do |item|%> 
     <tr> 
      <td class="item no_border_left" style="text-align:right;"> 
       <div id="<%= item.id %>" class="total"> 
        <%= number_to_currency(item.total) %> 
       </div> 
        <div id="total_form_<%= item.id %>"class="total_form"> 
         <%= form_for item, :method => :put, :html => { :class => "theform" }, :remote => true do |f| %> 
         <%= f.hidden_field :report_id, :value => @report.id %> 
         <%= f.text_field :total, 
             :value => item.total, 
             :size => '6', 
             :style => "font-size:1em;text-align:right;", 
             :autocomplete => :off, 
             :class => 'form_send', 
             :id => "total_field_#{item.id}" %> 
         <% end %> 
       </div> 
      </td> 
     </tr> 
     <div id="edit_the_item_<%= item.id %>"> 
      <%= render 'edit_item_row', item: item %> 
     </div> 
    <% end %> 
</table> 

UPDATE

因此,它看起來就像你不能有一個部分製成表格行和表格單元格,然後重新呈現局部的和不同的是它能夠無縫地工作,它看起來像標籤搞的一團糟。

我不得不把我的部分是這樣一個TD裏面:

<tr> 
    <td> 
     <div class="123<%= item.id %>"> 
      <%= render 'edit_item_row', item: item %> 
     </div> 
    </td> 
</tr> 

然後部分裏面,我把整個表,像這樣:

<table align="center" border="0" cellpadding="4" cellspacing="0" width="100%"> 
       <%= form_for item do |f|%> 
        <%= f.hidden_field :report_id, :value => @report.id %> 
        <tr class="highlite grid edit_item_<%= item.id %>"> 
         <td> 
         </td> 
         <td <%= item.notes? ? "style=border-bottom:none;" : "" %>> 

          <%= f.text_field :name, :style => "font-size:1em;width:234px;margin-right:20px;", :value => item.name, :id => "first_focus_#{item.id}" %> 

          <%= f.select :tax_id, Tax.all.collect{ |c| [c.territory_short_form, c.id]}, {:selected => item.tax_id}, :style => 'font-size:1em;' %> 
         </td> 
         <td> 
          <%= collection_select(:item, :job_id, @jobs, :id, :name, {:selected => item.job_id}, :style => 'font-size:1em;')%>      


         </td> 
         <td> 
          <%= f.text_field :deduction, :style => 'width:44px;font-size:1em;text-align:right;' %> 

         </td> 
         <td style="width:80px;text-align:right;"> 

         </td> 
         <td style="width:80px;text-align:right;"> 
          <%= f.text_field :tax_override, :style => "font-size:1.1em;width:70px;text-align:right;" %> 

         </td> 
         <td> 
          <%= f.text_field :unclaimed_tax, :style => "font-size:1.1em;width:70px;text-align:right;" %> 

         </td> 
         <td style="text-align:right;"> 
          <%= number_to_currency(item.cost) %> 
         </td> 
         <td style="text-align:center;"> 
          <%= f.text_field :total, :style => 'width:60px;font-size:1em;text-align:right;' %> 

         </td> 
        </tr> 
        <tr class="highlite grid edit_item_<%= item.id %>"> 
         <td colspan="7"> 
          Notes: 
          <%= f.text_field :notes, :style => "width:600px;font-size:1em;" %> 
         </td> 
         <td colspan="3" style="border-top:none;"> 
          <div class="delete" style="float:right;"> 
           <%= link_to 'Delete', item_path(item), :method => 'delete', :confirm => "Are you sure?" %> 
          </div> 
          <div style="float:left;"> 
           <%= f.submit 'Update', :style => 'font-size:1em;'%> 
          </div> 
          <div class="f_left" style="margin-left:80px;margin-top:4px;"> 
           <%= link_to 'Cancel', '#', :data => { 'item-id' => "#{item.id}" }, :class => 'clicky', :onclick => "$('.original').show();$('.item_#{item.id}').show();$('.edit_item_#{item.id}').hide();return false;" %> 
          </div> 

         </td> 

        </tr> 

       <% end %> 
</table> 

現在一切正常?聳肩。

+1

如果用'foobar'替換'escape_javascript(render(:partial =>'reports/edit_item_row',:locals => {:item => @item}))。html_safe'部分,會發生什麼?它會替換表格行還是添加? – tyler

+0

它把它放在上面! – fatfrog

+0

您是否100%確定頁面上的其他內容沒有設置爲「edit_the_item_ 」?也許你不會改變循環等之間的'item.id'? – tyler

回答

0

道歉關於不remebering的excat細節,但是當我previouly有這個問題是有人ENVIROMENTAL。這是發展中的情況,但不是在生產(Heroku)中。可能與config/envoronments/development有關。 Pierre