Направляющие: model_url для пользовательского действия

Скажем, у меня есть простое приложение блога направляющих.

И у меня есть пользовательское действие, как 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
задан shingara 25 June 2010 в 07:53
поделиться

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

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

2
ответ дан 2 September 2019 в 23:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: