带AJAX的response_to js的ActionController :: UnknownFormat

时间:2018-07-10 17:50:08

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

我正在互联网上搜索有关此主题的信息,但是我不了解AJAX如何与rails一起使用,我已经检查了文档并且只是不理解。

我所知道的是AJAX是异步的,只需要将以下代码放在视图中即可发出请求:“ remote:true”,我无法理解的主要是关于此代码的:

respond_to :js

显然,它告诉控制器它将响应Javascript,并且您必须为要使用JS做的任何事情创建一个文件,我的项目结构是这样的:

  

查看

New.html.erb:

<p>Imagen de portada</p>

<%= simple_form_for @entries, remote: true do |f| %>   
  <% f.file_field 'input-image' %> 
<% end %> 
<div id="image-entry"></div>

查看路线:

views | -->admins | -->entries |-->new.html.erb |-->new.js.erb

  

控制器

entries_controller.rb

module Admins
  class EntriesController < ApplicationController
    before_action :authenticate_admin!

    def index
      render 'index'
    end

    def new
      @entries=''
      render 'new'
      respond_to :js
    end
  end
end

控制器路线:

controllers | -->admins | -->entries_controller.erb

  

JS

new.js.erb

console.log('funciona');

$('#input-image').click(function(){
  $('body').css('background-color', 'red');
});

JS路线:

views | -->admins | -->entries |-->new.html.erb |-->new.js.erb

  

错误

我在此代码中的错误如下:

ActionController::UnknownFormat

因此,我对这个错误以及JS中的文件的正确名称有疑问,以使respond_to正常工作。

1 个答案:

答案 0 :(得分:0)

Irfan Fadilah在Facebook上的答案

您的请求未被EntriesController中的“ new”方法处理。默认的表单方法是POST,因此Rails会在您的EntriesController中寻找“创建”方法。

有关更多详细信息,请阅读《 Rails指南》中的RESTful路由。

为了使您的AJAX请求生效。在视图/条目中添加“ create”方法到EntriesController并在视图/条目中创建create.js.erb(只需编写alert(“ Hello”);或对其进行测试)。

https://www.facebook.com/groups/railsrocks/permalink/10151091424934957/