我有一个显示交易的表单(在index
操作中)。表格由两部分组成:主要部分和附加部分。
<%= form_for transaction, remote: true do |f| %>
# some form fields (main part)
<%= link_to 'Show additional', '#', class: 'show_additional' %>
<%= render 'transaction_additional', transaction: transaction, f: f %>
<% end %>
现在显示附加部分的链接只能通过JS显示它(从中移除display: none;
)。但我不想在页面上呈现其他部分,只有在用户单击此链接时才呈现它。因为页面上有很多事务,并且需要花费大量时间来加载包含所有这些事务的附加信息的页面。
我尝试将其设为远程并使用show
操作加载它。
<%= form_for transaction, remote: true do |f| %>
# some form fields (main part)
<%= link_to 'Show additional', transactions_path(transaction), class: 'show_additional', remote: true %>
<% end %>
并在show.js.erb
$(this).closest('form').append('<%= render 'transaction_additional', transaction: @transaction, f: f %>');
控制器中的@transaction
操作需要show
,但我不知道如何将f
变量传递给show
操作,并获取
undefined local variable or method `f' for #<#<Class:0x00000109d11258>:0x000001017939a0>
感谢您的帮助!
答案 0 :(得分:0)
继Rahul Singh之后,f
中没有show.js.erb
对象,这意味着您必须初始化一个新对象
我会这样做:
#app/views/view/show.js.erb
<%= form_for @transaction do |f| %>
$("form").append('<%= render 'transaction_additional', transaction: @transaction, f: f %>');
<% end %>