在Rails/Javascript中渲染简单的表单部分

Render simple form partial in Rails/Javascript

本文关键字:简单 表单部 Rails Javascript      更新时间:2023-09-26

我想在javascript erb文件中渲染我的表单部分。当我把它放进去的时候它会给我一个no method错误。什么好主意吗?

script.js.erb

$(document).ready(function() {
    $(".enquiry-button").click(function(e) {
    e.preventDefault();
    e.stopPropagation();
    if ($(this).parents('.cell').find('form').length == 0) {
        $(this).closest('.cell').append(
            "<div class='enquiry-form'>" +
            "<%= escape_javascript( render '/static/form' ) %>" +
            "</div>");

        $(this).closest('.cell').find(".enquiry-form:last").slideDown("slow");
    } else {
        $(this).closest('.cell').find(".enquiry-form:last").slideToggle("fast");
    }
});
});

_form.html.erb

<%= simple_form_for @user do |f| %>
            <%= f.error_messages %>
            <%= f.input :email %>
            <%= f.button :submit %>
<% end %>
误差

NoMethodError in Static#home
Showing /Users/colton/kitchen_ninja/kitchen_ninja/app/views/layouts/application.html.erb     where line #6 raised:
undefined method `render' for #<#<Class:0x007f90cc875c80>:0x007f90cd2017e0>
  (in /Users/colton/kitchen_ninja/kitchen_ninja/app/assets/javascripts/script.js.erb)
Extracted source (around line #6):

你把两种不同的东西混在一起了。您的render需要在服务器上运行。JavaScript的工作只是发出一个AJAX请求并获取一个资源。

那么,假设你要这样做:

$.ajax(url: "/test").done(function(html) {
    $("#results").append(html);
});

AJAX的唯一作用是获取远程资源并解析结果。

在Ruby中,您可以使用render发出HTML:

<%= escape_javascript( render '/static/form' ) %>

只要确保将AJAX请求指向正确的资源,这样Ruby就可以完成剩下的工作。

由于您正在使用.erb预处理脚本,您可以使用Ruby的字符串插值在JavaScript文件中返回部分作为字符串文字。

html = "<div class='enquiry-form'>" +
         "#{j render partial: 'static/form'}}" +
       "</div>"
$(this).closest('.cell').append( html );