Rails: model_url pour une action personnalisée
-
29-09-2019 - |
Question
Le mot Let je les simples rails app blog.
Et j'ai une action personnalisée, comme page_views
qui montre le nombre de vues du poste.
class PostsController < ApplicationController
def page_views
#show some page views
end
end
Et il y a aussi une vue associée dans le dossier app/views/Posts
.
Maintenant, dans le routes.rb
je:
map.resources :posts
map.resources :posts, :collection => {
:page_views=> :get
}
dans mes messages fichier show.html.erb
J'ai un lien vers la vue page_views
:
link_to("View Page Views",page_views_posts_path + "/" + post.id.to_s)
Une autre paths
:
page_views_posts_path(post)
page_views_path(post)
page_views_posts(post)
ont soit donné la méthode introuvable ou une URL incorrecte, comme:
http://localhost:3000/posts/page_views.#<posts:0xabcdef00>
Je suppose que l'URL doit être:
http://localhost:3000/posts/page_views/1
Alors, ce que je suis absent ici?
La solution
Si vous voulez fournir la page page_views
pour chaque vue, vous devez déclarer une action supplémentaire non pas comme méthode de collecte, mais en tant que méthode de membre:
map.resources :posts, :member => { :page_views=> :get }
Aussi, si vous voulez que cela pour tous les messages aussi bien (afficher le tableau de classement de certaines sortes) ajouter le même paramètre que l'action de collection:
map.resources :posts, :member => { :page_views=> :get }, :collection => { :page_views => :get }
De cette façon, vous aurez des itinéraires suivants générés:
page_views_post_path(post) # for single post
page_views_posts_path # for all posts
Vous pouvez vérifier de nouvelles routes en exécutant la commande suivante:
$ rake routes | grep page_views
Vous obtiendrez uniquement les vues associées compte tenu du fait que vous ne les avez pas déclarés pour d'autres contrôleurs.