通过JS渲染表单的一部分

时间:2014-02-15 13:07:04

标签: javascript ruby-on-rails ruby-on-rails-4

我有一个显示交易的表单(在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>

感谢您的帮助!

1 个答案:

答案 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 %>