سؤال

أحتاج إلى إضافة أساليب الأعضاء التالية إلى عدد من الموارد ، هل هناك طريقة لتجفيف هذا؟

 member do
    get   :votes
    post  :up_vote
    post  :down_vote
  end

في طريقي

resources :news do
  resources :comments do
     member do
        get   :votes
        post  :up_vote
        post  :down_vote
      end
  end
end

resources :downloads do
  resources :whatever do
     member do
        get   :votes
        post  :up_vote
        post  :down_vote
      end
  end
end

تعديل

لقد قمت بالفعل بنقلها إلى وحدة نمطية مثل:

module Votable
  module RoutingMethods
    def votable_resources
      member do
        get   "up_votes"
        get   "down_votes"
        post  "up_vote"
        post  "down_vote"
      end
    end
  end # RoutingMethods
end

الآن ، يبدو أن مساراتي.

require 'votable'

include Votable::RoutingMethods

MyApp::Application.routes.draw do

  namespace :main, :path => "/" do
    resources :users do 
      resources :comments do
        votable_resources
      end
    end
  end

end

شاهد تعليقاتي المضمنة ، لكني أريد الطريق المسماة لتبدو: main_users_comments_up_votes

هل كانت مفيدة؟

المحلول

ألا يمكنك فقط تحديد طريقة في ملفات طرقك؟

def foo
  member do
   get   :votes
   post  :up_vote
   post  :down_vote
  end
end


resources :news do
 resources :comments do
   foo
 end
end

يحرر

لم أستخدم هذه التقنية من قبل. يبدو أنه يعمل عندما فعلت "طرق أشعل النار". على أي حال ، فإن ملف الطرق هو مجرد رمز Ruby. فقط كن حذرًا بشأن اسم الطريقة التي تحددها لأنه تم تعريفه في مثيل ActionDispatch :: Routing :: Mapper.

# routes.rb

MyApp::Application.routes.draw do
  puts self
  puts y self.methods.sort
end

# Terminal
> rake routes
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top