Вопрос

Допустим, у меня есть простое приложение блога Rails.

И у меня есть индивидуальное действие, как page_views который показывает количество просмотров пост.

class PostsController < ApplicationController

  def page_views
     #show some page views
  end

end

И есть также связанный с этим мнение в app/views/Posts папка.

Теперь в routes.rb У меня есть:

map.resources :posts

map.resources :posts, :collection => {
                                      :page_views=> :get
                                      }

в моих постах show.html.erb Файл у меня есть ссылка на page_views Посмотреть:

link_to("View Page Views",page_views_posts_path + "/" + post.id.to_s)

Другой paths:

page_views_posts_path(post)
page_views_path(post)
page_views_posts(post)

Привели либо к методу, не найденному, либо к неправильному URL, например:

http://localhost:3000/posts/page_views.#<posts:0xabcdef00>

Я бы предположил, что URL должен быть:

http://localhost:3000/posts/page_views/1

Итак, что мне здесь не хватает?

Это было полезно?

Решение

Если вы хотите предоставить page_views Страница для каждого представления вы должны объявлять дополнительные действия не как метод сбора, а как метод участника:

map.resources :posts, :member => { :page_views=> :get }

Кроме того, если вы хотите это для всех сообщений (покажите какую -то таблицу ранжирования) добавьте тот же параметр, что и действие сбора:

map.resources :posts, :member => { :page_views=> :get }, :collection => { :page_views => :get }

Таким образом, вы получите сгенерированные маршруты:

page_views_post_path(post) # for single post
page_views_posts_path      # for all posts

Вы можете проверить новые маршруты, выполнив следующую команду:

$ rake routes | grep page_views

Вы получите только эти связанные взгляды, учитывая тот факт, что вы не объявили их для других контроллеров.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top