Rails: Model_url للعمل المخصص
-
29-09-2019 - |
سؤال
لنفترض أن لدي تطبيق مدونة 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
ستحصل فقط على وجهات النظر المرتبطة فقط بالنظر إلى حقيقة أنك لم تعلنها لوحدات التحكم الأخرى.