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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top