未定义的局部变量或方法`f' for,当使用jquery进行部分渲染时

时间:2018-01-04 05:07:01

标签: javascript jquery ruby-on-rails ruby ruby-on-rails-5

error

单击按钮时,必须显示部分。

$('#info_fields').html( '<%= render partial: "investor_info_fields", locals: { f: f } %>');

部分形式。

<%= f.fields_for :investor_infos do |f| %>
            <div class="nested-fields">
              <%= f.label :name %> <br>
              <%= f.text_field :name, label: "invested companies", class: "input-md form-control mb-20" %>

               <%= f.label :investment_size_id, "Investment size" %> <strong> *</strong><br>
              <%= f.collection_select :investment_size_id, InvestmentSize.all, :id, :size, {}, {class: "input-md form-control mb-20 startup_info_required"} %><br>


              <%= f.label :investment_time_id, "Investment time" %> <strong> *</strong><br>
              <%= f.collection_select :investment_time_id, InvestmentTime.all, :id, :time, {}, {class: "input-md form-control mb-20 startup_info_required"} %><br>
            </div>
          <% end %>

Jquery的:

$(".my-class").click(function() {
               var whut=$(this).val();
               ($(this).val() == 4) {

               $('#info_fields').html( '<%= render partial: "investor_info_fields", locals: { f: f } %>');

        }
          });

图像:

1 个答案:

答案 0 :(得分:1)

在这里,您必须进行以下两项更改:

  1. 正如我在评论中提到的,如果您已经编写了脚本 在form_tag中,它不会起作用。所以在form_tag中删除你的脚本。

  2. 替换以下行:

    $('#info_fields').html( '<%= render partial: "investor_info_fields", locals: { f: f } %>')

    使用:

    $('#info_fields').html( '<%= j render partial: "investor_info_fields", locals: { f: f } %>')

  3. 这里我在j关键字前面添加了一个render(又名escape_javascript),它可以帮助你渲染部分来自javascript,如果部分内部有一些ruby代码,除了简单的html代码。