Lorsque « link_to » est utilisé sans bloc, il fonctionne parfaitement:Rails: link_to avec bloc faire ne fonctionne pas
<%= link_to "Ololo", {controller: "posts", action: "upvote", id: post.id}, method: :put, remote: true, class:"nav-link" %>
Mais lorsque je tente d'utiliser le bloc, il finit avec l'erreur:
<%= link_to {controller: "posts", action: "upvote", id: post.id}, method: :put, remote: true, class:"nav-link" do %>
<%= image_tag('icons/candy.svg', alt: "Candies", class:"rounded-circle icon-nav") %>
<%= post.get_upvotes.size %>
<% end %>
Et voici le message d'erreur:
SyntaxError (/home/alex/test/app/views/application/_votes_exp.html.erb:5: syntax error, unexpected ':', expecting '}'
...r.append= link_to {controller: controller_name, action: "up...
... ^
/home/alex/test/app/views/application/_votes_exp.html.erb:5: syntax error, unexpected ',', expecting '}'
...troller_name, action: "upvote", id: entity.id}, method: :put...
... ^
/home/alex/test/app/views/application/_votes_exp.html.erb:5: syntax error, unexpected tLABEL
...pvote", id: entity.id}, method: :put, class:"nav-link", remo...
... ^
/home/alex/test/app/views/application/_votes_exp.html.erb:5: syntax error, unexpected ',', expecting keyword_end
...method: :put, class:"nav-link", remote: true do @output_buff...
... ^
/home/alex/test/app/views/application/_votes_exp.html.erb:49: syntax error, unexpected keyword_ensure, expecting end-of-input):
il semble donc que cela ne comprend pas hachage littérale, mais je suis trop novice pour savoir wh à tort ... Toute aide est appréciée!
P.S .: Je ne peux pas supprimer le hachage littéral, car link_to est en désordre avec la classe css (ajoute la classe comme partie de l'adresse). Aussi je dois utiliser le style argument plus au lieu de quelque chose comme « upvote_post_path » parce que le nom du contrôleur est représenté par la variable (dans mon exemple, il est réduit pour une meilleure lisibilité du code)
MISE À JOUR:
routes.rb
Rails.application.routes.draw do
root to: "home#index"
resources :posts do
member do
put "upvote", to: "posts#upvote"
end
end
end
Vous pouvez passer la route en passant le contrôleur, l'action et l'ID. Pouvez-vous ajouter vos itinéraires? –
Oui, bien sûr! Je vais mettre à jour la question. –