Почему ajax не показывает новые данные на странице? - PullRequest
1 голос
/ 16 апреля 2020

Я создаю новое приложение в Ruby на Rails и использую следующую строку:

rails generate scaffold User name

Я меняю контроллер следующим образом:

class UsersController < ApplicationController
  def index
    @users = User.all
    @user = User.new
  end
  # ...

Представление индекса ( app / views / users / index. html .erb) содержит:

<h1>Users</h1>

<ul id="users">
  <%= render @users %>
</ul>

<br>

<%= form_with(model: @user) do |f| %>
  <%= f.label :name %><br>
  <%= f.text_field :name %>
  <%= f.submit data: { "disable-with": "Saving..." } %>
<% end %>

Часть app / views / users / _user. html .erb содержит следующее:

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

Я изменяю действие создания на контроллере следующим образом:

# app/controllers/users_controller.rb
# ......
def create
  @user = User.new(params[:user])

  respond_to do |format|
    if @user.save
      format.html { redirect_to @user, notice: 'User was successfully created.' }
      format.js #THIS IS ADDED
      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

Я создал файл с именем "create. js .erb" в "app / views / users /" и добавил строка ниже: app / views / users / create. js .erb:

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

Когда я сохраняю нового пользователя, регистрация базы данных происходит, но пользователь не отображается на странице.

Ruby: ruby 2.6.5p114 (версия 2019-10-01 67812) [x86_64-linux]
Rails: Rails 6.0.2.2

1 Ответ

2 голосов
/ 16 апреля 2020

Проверьте консоль вашего браузера, какую ошибку вы получаете. Я уверен, что в консоли браузера должна быть ошибка javascript.

Полагаю, вы не включили бы jquery в свой application.js. Вы должны сделать это явно, так как он не включается автоматически в приложение rails 6.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...