Rails: model_url для пользовательских действий - PullRequest
1 голос
/ 24 июня 2010

Допустим, у меня есть простое приложение для блога 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

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

1 Ответ

2 голосов
/ 24 июня 2010

Если вы хотите предоставить 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

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

...