链接到远程销毁不是更新div

时间:2014-07-07 06:41:54

标签: ruby-on-rails ruby ruby-on-rails-2

我创建了一个显示我的所有发票产品的视图,还创建了一个从div中删除发票产品的链接,它将会更新,因此每次删除所有内容都会在同一页面中。

这是表格

invoices
  |id|  |name|
    1    ABC
    2    DEF

invoice_products
  |id|  |invoice_id|  |word|
    1      1           AAAA
    2      1           BBBB 
    3      2           CCCC   
    4      2           DDDD

这是控制器:

def show
   @invoice= Invoice.find(params[:id])
end

def destroy_job
   @job = InvoiceProduct.find(params[:id])
   @invoice = @job.invoice
   @job.destroy()

   render :partial=>"finance_management/invoice/partials/new_subjects" }
end

这是模型

class Invoice < ActiveRecord::Base
  has_many   :invoice_products
end

class InvoiceProduct < ActiveRecord::Base
  belongs_to :invoice
end

以下是视图:&#34; show.html.erb&#34;

<%= @invoice.id %>

<div id="table"%>
<% @invoice.invoice_products.each do |i| %>
   <%= i.name %>
   <%= i.word %>
   <%=link_to_remote(image_tag("image.png"), :update => "table",:url => { :controller=>'finance_management/invoice_product',:action => 'destroy_job',:id=>i.id }  )%>
<% end %>
</div>

日志:

ActionView::TemplateError (undefined method `invoice_products' for nil:NilClass)

我创建了&#34; delete_job.js.erb&#34;:

$('table').html("<%= j(render partial: 'finance_management/invoice/partials/new_subjects') %>");

但我收到了这个错误:

NoMethodError (undefined method `invoice_products=' for nil:NilClass):

问题是没有更新div似乎是因为获得nil错误

有人可以帮我吗?

2 个答案:

答案 0 :(得分:1)

创建一个文件&#34; destroy_job.js.erb&#34;并将render方法放在此文件中,而不是在控制器中调用它:

$('YOUR_ID').html("<%= j(render partial: 'finance_management/invoice/partials/new_subjects') %>");

答案 1 :(得分:1)

据此,你必须这样做:

控制器invoice_controller.rb:

def show
  @invoice= Invoice.find(params[:id])
  @products = InvoiceProduct.find(:all,:conditions=>['invoice_id = ?',params[:id] ])
end

def destroy_job
  @job = InvoiceProduct.find(params[:id])
  @obj_invoice = Invoice.find(@job.invoice_id)    
  @job.destroy
end

视图&#34; invoice / show.html.erb&#34;

<%= @invoice.id %>
<div id="table"%>
  <%= render :partial=>"invoice/partials/products" %>
</div>

不要忘记创建部分视图&#34; invoice / partials / _products.erb&#34;这将取代div

 <% @products.each do |i| %>
    <%= i.name %>
    <%= i.word %>
   <%=link_to_remote(image_tag("image.png"),:url=>{:controller=>'invoice',:action => 'destroy_job',:id=>i.id})%>
 <% end %>

最后创建&#34; invoice / destroy_job.rjs&#34;

 page.replace_html 'table', :partial=>'invoice/partials/products'