创建时Rails ajax错误

时间:2014-03-02 12:07:15

标签: ruby-on-rails

大家好我想在我的rails应用程序中使用ajax: 这是我的routes.rb文件

ExampleAjax::Application.routes.draw do
   root 'users#index'
    resources :users
end

我的控制器文件

class UsersController < ApplicationController
 def index
    @users = User.all
    @user = User.new
  end
 def create
  @user = User.new(user_params)

  respond_to do |format|
    if @user.save
      format.html { redirect_to @user, notice: 'User was successfully created.' }
      format.js   {}
      format.json { render json: @user, status: :created, location: @user }
    else
      format.html { render action: "new" }
      format.json { render json: @user.errors, status: :unprocessable_entity }
    end
  end
end

private 
def user_params
    params.require(:user).permit(:fname)
end
end

我的观看文件 index.html.erb

<b>Users</b>

<ul id="users">
<% @users.each do |user| %>
  <%= render user %>
<% end %>
</ul>

<br>

<%= form_for(@user, remote: true) do |f| %>
  <%= f.label :fname %><br>
  <%= f.text_field :fname %>
  <%= f.submit %>
<% end %>

new.html.erb

<%=form_for(@user, remote: true) do |f|%>
    <p>
        <%= f.label :fname %><br>
        <%= f.text_field :fname %>
    </p>
    <p>
        <%= f.label :lname %><br>
        <%= f.text_field :lname %>
    </p>
    <p>
        <%= f.submit %>
    </p>
<% end %>

_user.html.erb

<li><%= user.fname %></li>

_create.js.erb

$("<%= escape_javascript(render @user) %>").appendTo("#users");

我的问题是当我点击创建用户时 我在控制台

中收到以下错误
POST http://localhost:3000/users 500 (Internal Server Error) 

2 个答案:

答案 0 :(得分:1)

您的代码正在阻止此块:

format.js   {}

其中没有定义任何内容,因此您的应用会尝试按照正常情况执行操作,即。渲染您所在行动的视图。

您处于创建操作中,格式为js,因此会尝试呈现create.js.erb

您应该重命名_create.js.erb以删除下划线。

答案 1 :(得分:0)

<强>的Ajax

  

我想在我的rails应用程序中使用ajax

为了向您提供有关Ajax的一些信息,它基本上已集成到您的应用程序中:

  

Ajax是一组相互关联的Web开发技术   客户端创建异步Web应用程序

这基本上是一种向您的网络应用发送asynchronous请求的方式(通过javascript)。异步本质上意味着您发送的请求超出了典型HTTP“同步”请求结构的范围

HTTP通过响应请求来工作。您执行的每次点击都会向您的服务器发送请求,该服务器会响应数据。 Synchronous请求是您按顺序执行的请求,而异步“ajax”请求是独立发送的


<强>代码

您的问题是您没有create.js.erb文件:

respond_to do |format|
    format.html #-> action.html.erb
    format.js #-> action.js.erb
end

除非您调用此块中的其他方法(例如render nothing),否则Rails将在您的action.js.erb目录中查找您的views文件


<强>滑轨

Rails平等处理所有请求,并使用ActionDispatch::Http::MimeNegotiation类确定它是ajax请求

这意味着您不必执行任何“特殊”操作来使用Ajax - 只需将请求发送到您的路由,然后使用respond_to do |format|

在后端处理它们