J'essaie actuellement d'utiliser une méthode personnalisée dans Rails et je ne sais pas comment m'y prendre. En plus des méthodes par défaut dans le contrôleur, je voulais ajouter ce qui suit :
def cancel
@newsletter = Newsletter.find(params[:id])
respond_to do |format|
#SendGrid Newsletter API - Delete Newsletter Schedule
SendGrid.delete_schedule(@newsletter.name)
@newsletter.status = "CANCELLED"
@newsletter.save
format.html { redirect_to newsletters_url }
format.json { head :no_content }
end
fin
Cette méthode est identique à la méthode par défaut :destroy, mais elle ne détruit pas réellement l'objet.
A mon avis, j'avais les éléments suivants :
<% @newsletters.each do |newsletter| %>
<tr>
<td><%= newsletter.identity %></td>
<td><%= newsletter.name %></td>
<td><%= newsletter.recipients %></td>
<td><%= newsletter.subject %></td>
<td><%= newsletter.html %></td>
<td><%= newsletter.text %></td>
<td><%= newsletter.schedule %></td>
<td><%= newsletter.status %></td>
<td><%= link_to 'Show', newsletter %></td>
<td><%= link_to 'Edit', edit_newsletter_path(newsletter) %></td>
<td><%= link_to 'Destroy', newsletter, method: :delete, data: { confirm: 'Are you sure?' } %></td>
<td><% if newsletter.status == "SCHEDULED" %><%= link_to 'Cancel', newsletter, method: :cancel, data: { confirm: 'Cancel Schedule?' }%><% end %></td>
</tr>
<% end %>
J'ai reçu l'erreur : Aucune route ne correspond à [POST] " _ URL de la newsletter __ "
Quand je rake les routes, il n'y a pas de route pour l'erreur ci-dessus. Puis-je savoir comment ajouter la route et pourquoi cette route est nécessaire ?
UPDATE Actuellement, j'ai toujours l'erreur no route matches. Vous trouverez ci-dessous tous mes fichiers relatifs à la méthode "Cancel" :
routes.rb
resources :newsletters do
match '/cancel/:id' => 'newsletters#cancel', :as => :cancel
end
newsletters_controller.rb
def cancel @newsletter = Newsletter.find(params[:id])
respond_to do |format|
#SendGrid Newsletter API - Delete Newsletter Schedule
SendGrid.delete_schedule(@newsletter.name)
@newsletter.status = "CANCELLED"
@newsletter.save
format.html { redirect_to newsletters_path(@newsletter) }
format.json { head :no_content }
end
end
newsletters/index.html.erb
<%= link_to 'Cancel', newsletter_cancel_path(newsletter) %>