ruby 2.5.7 Rails 5.2.4.3 OS: macOS Catalina
1 Introduction de gem'jquery-rails ' 2 Modèle partiel pour la partie que vous souhaitez utiliser la communication asynchrone 3 télécommande: décrire vrai 4 Créez un fichier js.erb 5 Supprimer la destination de redirection du contrôleur
Si ça ne marche pas, ActionView :: Template :: Error est souvent affiché dans le terminal Je pense que la plupart des gens oublient de définir des variables. Après cela, si vous ne faites pas d'erreur dans le nom de l'ID et la description du rendu, cela devrait fonctionner.
Gemfile
gem 'jquery-rails'
Terminal
$ bundle install
app/assets/javascript/sapplication.js
//= require rails-ujs
//= require activestorage
//= require jquery <--ajouter à
//= require turbolinks
//= require_tree .
Cette fois, nous effectuerons une communication asynchrone sur le nouvel écran de publication,
erb:app/views/posts/new.html.erb
<h1>Posts#new</h1>
<span>Utilisateur actuellement connecté:<%= current_user.name %></span>
<--- form_pour former_Changer pour avec, data: {remote: true}Décris--->
<%= form_for(@post, url: posts_path) do |f| %>
<--- --->
<div>
<%= f.label :Titre%><br>
<%= f.text_field :title, autofocus: true %> <--Ajouter un identifiant
</div>
<div>
<%= f.label :Contenu%><br>
<%= f.text_area :body %>
</div>
<div><%= f.submit "Publier" %></div>
<% end %>
<table>
<thead>
<tr>
<th>Publié par nom</th>
<th>Titre</th>
<th>Texte</th>
<th></th>
<th></th>
<th></th>
</tr>
</thead>
<tbody> <--Ajouter un identifiant
<---d'ici--->
<% @posts.each do |post| %>
<tr>
<td><%= post.user.name %></td>
<td><%= post.title %></td>
<td><%= post.body %></td>
<td><%= link_to "Détails", post_path(post) %></td>
<td><%= link_to "Éditer", edit_post_path(post) %></td>
<td><%= link_to "Effacer", post_path(post), method: :delete %></td>
</tr>
<% end %>
<---Modèle partiel jusqu'à ici--->
</tbody>
</table>
La description modifiée est la suivante.
erb:app/views/posts/new.html.erb
<h1>Posts#new</h1>
<span>Utilisateur actuellement connecté:<%= current_user.name %></span>
<%= form_with model:[@post], data: {remote: true} do |f| %>
<div>
<%= f.label :Titre%><br>
<%= f.text_field :title, autofocus: true, id: "text" %>
</div>
<div>
<%= f.label :Contenu%><br>
<%= f.text_area :body %>
</div>
<div><%= f.submit "Publier" %></div>
<% end %>
<table>
<thead>
<tr>
<th>Publié par nom</th>
<th>Titre</th>
<th>Texte</th>
<th></th>
<th></th>
<th></th>
</tr>
</thead>
<tbody id="post">
<%= render 'posts/new', posts: @posts %>
</tbody>
</table>
<détails>
Pour le modèle partiel, créez le fichier suivant et remplacez @posts par une variable locale. Ecrire à distance: vrai également dans le bouton de suppression
erb:app/views/posts/_new.html.erb
<% posts.each do |post| %>
<tr>
<td><%= post.user.name %></td>
<td><%= post.title %></td>
<td><%= post.body %></td>
<td><%= link_to "Détails", post_path(post) %></td>
<td><%= link_to "Éditer", edit_post_path(post) %></td>
<td><%= link_to "Effacer", post_path(post), method: :delete, remote: true %></td>
</tr>
<% end %>
js:app/views/create.js.erb
$('#post').html("<%= j(render 'posts/new', posts: @posts) %>");
$("text_area").val("");
$("#text").val("");
js:app/views/destroy.js.erb
$('#post').html("<%= j(render 'posts/new', posts: @posts) %>");
<détails>
app/controllers/posts_controller.rb
def create
@posts = Post.all <---ajouter à
@post = Post.new(post_params)
@post.user_id = current_user.id
if @post.save
redirect_to new_post_path <---Effacer
else
render :new
end
end
def destroy
@posts = Post.all <---ajouter à
@post = Post.find(params[:id])
@post.destroy
redirect_to request.referer <---Effacer
end
Modifié.
app/controllers/posts_controller.rb
def create
@posts = Post.all
@post = Post.new(post_params)
@post.user_id = current_user.id
if @post.save
else
render :new
end
end
def destroy
@posts = Post.all
@post = Post.find(params[:id])
@post.destroy
end
Recommended Posts