سؤال

لنفترض أن لدي تطبيق مدونة Simple 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