Rails: link_to appels de méthode personnalisée dans le contrôleur
Je cherche à utiliser link_to
d'appeler une méthode dans mon contrôleur. Cependant, pour une raison étrange, la route semble pour le show
méthode.
De mon point de vue:
<% @beverages.each do |beverage| %>
..
<%= link_to 'Archive', beverages_archive_path(:id => beverage.id) %>
..
<% end %>
Dans ma config/routes.rb
match 'beverages/archive' => 'beverages#archive'
Dans mon beverages_controller.rb
def archive
beverage = Beverage.find(params[:id])
respond_to do |format|
# format.html # show.html.erb
format.json { render json: beverage }
end
# beverage.update_attribute('archive', true)
end
Quand je clique sur le lien archives dans la vue, l'URL ne change pas: http://localhost:3000/beverages/archive?id=11
, mais j'ai l'erreur suivante.
L'erreur que je reçois:
ActiveRecord::RecordNotFound (impossible de trouver la Boisson id=archive):
app/controllers/beverages_controller.rb:46:dans "show"
Aucune idée sur ce que je fais de mal? Votre aide est très appréciée!
PS. J'ai également regardé Rails 3 link_to supprimer destory les appels de méthode méthode show?
mais rien ne semblait fonctionner.
routes.rb
? Vous avez probablement quelque chose comme resources :beverages
ci-dessus correspondent à la ligne?Doublon potentiel de stackoverflow.com/questions/3738573/...
OriginalL'auteur Rahul | 2013-01-10
Vous devez vous connecter pour publier un commentaire.
Avez-vous essayé ceci dans votre parcours?
Cela va créer de l'beverages_archive_path méthode pour vous. Aussi, tant que vous êtes à la recherche pour une boisson en particulier, utiliser :id de l'intérieur de la route de sorte qu'il sait par où prendre le paramètre id de.
En dehors de cela, vous pouvez toujours demander à un lien plus précisément le contrôleur et l'action à lier en faisant:
Prises à partir d'ici: Ruby on rails 3 link_to contrôleur et l'action
Rails 4 n'aime pas le mot "match", je voudrais suggérer à l'aide de 'post' ou 'avoir' à la place.
OriginalL'auteur weltschmerz
Utiliser l'autre notation (pas
match
) à la place.Essayez celui-ci et laissez-moi savoir si quelque chose va mal.
OriginalL'auteur MurifoX
Il n'y a pas assez d'informations, cliquez ici pour savoir pourquoi
beverages_archive_path
travaux dans votre application -- un problème, c'est que votre fichier de routes ne permet pas de définir un nom pour votrebeverages#archive
route. Ce que vous voulez, c'est quelque chose comme:ou mieux encore utiliser plein de ressources routage de conventions comme suit:
Ce qui se passe est que vous avez un
beverages#show
itinéraire qui correspond à/beverages/:id
, et c'est ce que/beverages/archive
matchs (avec:id => 'archive'
).OriginalL'auteur gregates