我创建了一个显示我的所有发票产品的视图,还创建了一个从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错误
有人可以帮我吗?
答案 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'